【发布时间】:2019-08-06 02:24:04
【问题描述】:
您好,在测试套件中,我认为我有 2 个同一个提供者的活动实例,一个用于实现,另一个用于实际实现。
我的结论基于一个事实,即在我的测试中,我尝试用 jest.fn 调用替换方法,但在我正在测试的服务上,该方法仍然指向原始实现。
更奇怪的是,我能够模拟另一个执行完全相同的过程的服务,就好像取决于这些服务的注入方式(它们在容器图中的来源)它会起作用或不起作用。
我会尝试分享一些sn-ps,但当然,只有一个小的repo才能真正重现它,但也许有人有见识:
beforeAll(async done => {
app = await Test.createTestingModule({
imports: [
SOME_MODULES,
],
providers: [
EssayApplicationService,
ReviewFacade,
ExamCacheResultService,
],
}).compile();
essayApplicationService = app.get<EssayApplicationService>(EssayApplicationService)
reviewFacade = app.get<ReviewFacade>(ReviewFacade)
examCacheResult = app.get<ExamCacheResultService>(ExamCacheResultService)
await app.init()
done()
})
it('should invoke review only once', async done => {
reviewFacade.startReview = jest.fn() --> this works
examCacheResult.clearCachedResult = jest.fn() --> this fails
await essayApplicationService.finishApplication()
expect(reviewFacade.startReview).toHaveBeenCalledTimes(1)
expect(reviewFacade.startReview).toHaveBeenCalledWith(expect.objectContaining({ id: 1 }))
expect(examCacheResult.clearCachedResult).toHaveBeenCalledTimes(1) ---> here this fails, although it's called!!
所以,问题归结为这样一个事实,即我 100% 肯定在被测服务上调用了这两种方法,但由于某种原因,第二个方法没有被 mock 取代
【问题讨论】:
标签: javascript node.js typescript jestjs nestjs