Привет, в тестовом наборе мне кажется, что у меня есть 2 живых экземпляра одного и того же провайдера, один для реализации, а другой для реальной реализации.
Я основываю свой вывод на том факте, что в своем тесте я попытался заменить метод вызовом jest.fn, но все же в тестируемой службе метод все еще указывает на исходную реализацию.
Что делает это еще более странным, так это то, что я смог смоделировать другой сервис, выполняющий точно такую же процедуру, как если бы, в зависимости от того, как эти сервисы были внедрены (откуда они взялись на графе контейнера), это будет работать или не работать.
Я постараюсь поделиться некоторыми фрагментами, но, конечно, на самом деле воспроизвести его может только небольшой репозиторий, но, возможно, у кого-то есть понимание:
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% уверен, что оба метода были вызваны на тестируемом сервисе, но второй по какой-то причине не был заменен фиктивным