如何在NestJS上测试具有多个防护的控制器
我正在测试我的控制器,但我有一个问题,以模拟该控制器的警卫。我的应用程序是用NestJs版本6.13.1开发的 我可以超越一个守卫来模拟它,正如下面的剪断:如何在NestJS上测试具有多个防护的控制器,nestjs,Nestjs,我正在测试我的控制器,但我有一个问题,以模拟该控制器的警卫。我的应用程序是用NestJs版本6.13.1开发的 我可以超越一个守卫来模拟它,正如下面的剪断: const fakeGuard: CanActivate = { canActivate: () => true }; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ impo
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();
});
我找不到办法嘲笑不止一个警卫。当我调用overrideGuard时,我尝试通过2个守卫,但是当我运行测试时,没有任何异常。但我知道,问题是我不能嘲笑那两个警卫。如果您遇到同样的问题,请与我分享您的解决方案,谢谢。您需要指定要用自己的
覆盖守卫覆盖的每个守卫。您可以在每个
之前设置一个如下所示的:
beforeach(异步()=>{
常量ModuleTexture:TestingModule=Wait Test.createTestingModule({
导入:[AppModule],
})
.超控守卫(守卫1)
.useValue({canActivate:()=>true})
.超控守卫(守卫2)
.useValue({canActivate:()=>true})
.compile();
app=moduleTexture.createNestApplication();
等待app.init();
});
现在,两个防护都将返回true,并且可以成功命中测试路由您需要指定要用自己的覆盖防护
覆盖的每个防护。您可以在每个
之前设置一个如下所示的:
beforeach(异步()=>{
常量ModuleTexture:TestingModule=Wait Test.createTestingModule({
导入:[AppModule],
})
.超控守卫(守卫1)
.useValue({canActivate:()=>true})
.超控守卫(守卫2)
.useValue({canActivate:()=>true})
.compile();
app=moduleTexture.createNestApplication();
等待app.init();
});
现在两个守卫都将返回true,并且测试路线可以成功命中Jay McDoniel感谢您的回答。我注意到真正的问题是嘲笑我的定制警卫。我的自定义guard接收两个参数,一个是反射器,一个是服务。也许这些参数导致了我不确定的问题。看看nestjs报告的内容:[Nest]11812-2020-01-10 17:12:30[ExceptionHandler]对象:{}Jay McDoniel谢谢你的回答。我注意到真正的问题是嘲笑我的定制警卫。我的自定义guard接收两个参数,一个是反射器,一个是服务。也许这些参数导致了我不确定的问题。看看nestjs报告的内容:[Nest]11812-2020-01-10 17:12:30[ExceptionHandler]对象:{}
@UseGuards(AuthGuard('jwt'), PermissionGuard)
export class UsersController {
...
}