我一直在纠结如何对一个场景进行单元测试,我多次遇到这个问题。它与在一个类中模拟一个具有特定返回类型的方法有关。假设我们有一个类:
export class ExampleService {
async findUsers() : Promise<Users[]> {
const repository = getRepository(repoConfig);
return repository.find()
};
}
下面是我尝试测试的服务:
import { ExampleService } from './ExampleService.ts'
class ToBeTestedService{
async findHomeOwners() : Promise<Users[]> {
const exampleService = new ExampleService();
const users = await exampleService.findUsers();
homeOwners = users.map((user) => return user.home == true));
return homeOwners;
}
}
不要介意代码的正确性(这只是一个示例)。因此,我面临的问题是如何模拟ExampleService中的findUsers方法。我可以模拟整个服务,但无法模拟对该方法的响应(因为它默认设置为未定义)。
下面是我在测试文件中使用的方法。
jest.mock('../ExampleService');
describe('Unit Test: Example Service', () => {
test('findHomeOwners', async () => {
const exampleService = new ExampleService();
jest
.spyOn(exampleService , 'findUsers')
.mockImplementationOnce(() => {
return ExampleServiceMock.findUsers();
});
}
}
我还创建了一个ExampleServiceMock.findUsers,它返回一个带有测试值的User[]类型的promise。这里的问题是,由于我没有将类的示例传递给服务,我的方法的模拟实现似乎没有被应用。在调试ToBeTestedService时,我可以看到exampleService.findUsers()
总是返回undefined。
关于我如何克服这个问题有什么想法/建议吗?提前感谢
1条答案
按热度按时间qvtsj1bj1#
所以我设法为我的问题找到了一个asnwer。如果有人面临类似的问题,解决它的方法是做以下事情:
因此,我所做的不是模拟示例服务示例上的方法,而是模拟类中的实际方法,这样,当创建类的示例时,具有所需模拟实现的方法