Я пытаюсь проверить мой AuthModule
контроллер HTTP-слой с supertest
, как описано в официальной Nest js документации . Этот модуль использует EmailService
, импортированный из EmailModule
.
. Я знаю, что вы можете переопределить провайдеров следующим образом:
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [
AuthModule,
],
})
.overrideProvider(EmailService)
.useValue(buildMock(EmailService))
, но это не работает, я предполагаю, потому что EmailModule
импортируется в AuthModule
. Обходной путь - .overrideProvider(...).useValue(...)
каждому провайдеру в EmailModule
, но в этом нет смысла, так как мне бы пришлось также высмеивать модули, импортированные EmailModule
.
Когда я тестирую * e2e AuthModule
, честно говоря, мне все равно, как работает EmailModule
. Все, что мне нужно, - это смоделировать EmailService
и убедиться, что мой модуль авторизации правильно взаимодействует с этой службой.
У Test.createTestingModule({})
, к сожалению, нет .overrideModule()
метода.
Я пытался издеваться над EmailModule
с шуткой:
jest.mock('../../src/email/email.module.ts', () => {
@Module({})
class EmailModule {
}
return EmailModule;
});
, но я получаю эту ошибку:
Error: Nest cannot create the module instance. Often, this is because of a circular dependency between modules. Use forwardRef() to avoid it.
(Read more: https://docs.nestjs.com/fundamentals/circular-dependency)
Scope [RootTestModule -> AppModule]
Кто-нибудь знает, как этого можно достичь?