Как я могу проверить контроллер с несколькими охранниками на NestJS - PullRequest
0 голосов
/ 10 января 2020

Я тестирую свой контроллер, но у меня проблема с издевательством над охранниками этого контроллера. Мое приложение было разработано с использованием Nest Js версии 6.13.1

. Я могу переопределить один охранник, чтобы смоделировать его, как показано ниже:

const fakeGuard: CanActivate = { canActivate: () => true };

beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
        imports: [
            CoreModule,
            AuthModule,
            PermissionsModule,
            UsersModule
        ],
        controllers: [UsersController],
    })
    .overrideGuard(AuthGuard('jwt')).useValue(fakeGuard) // When I have one guard in my controller it works right
    .compile();

    controller = module.get<UsersController>(UsersController);
    app = module.createNestApplication();
    app.init();
});

Но в моем сценарии у меня есть 2 охранники, определенные в моем контроллере

@UseGuards(AuthGuard('jwt'), PermissionGuard)
export class UsersController {
    ...
}

Я не нашел способа издеваться над несколькими охранниками. Я пытался пройти 2 охранника, когда я вызываю overrideGuard, но когда я запустил тест, ничего не получалось. Но я знаю, проблема в том, что я не мог издеваться над этими двумя охранниками. Если вы столкнулись с той же проблемой, поделитесь со мной своим решением, спасибо.

1 Ответ

2 голосов
/ 10 января 2020

Вы должны указать каждый охранник, которого хотите переопределить, своим собственным overrideGuard. У вас может быть beforeEach, который выглядит следующим образом:

beforeEach(async () => {
  const moduleFixture: TestingModule = await Test.createTestingModule({
    imports: [AppModule],
  })
    .overrideGuard(Guard1)
    .useValue({ canActivate: () => true })
    .overrideGuard(Guard2)
    .useValue({ canActivate: () => true })
    .compile();

  app = moduleFixture.createNestApplication();
  await app.init();
});

Теперь оба охранника вернут истину, и тестовый маршрут может быть успешно пройден

...