гнездо js макет импортного модуля - PullRequest
1 голос
/ 19 марта 2020

Я пытаюсь проверить мой 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]

Кто-нибудь знает, как этого можно достичь?

...