相关疑难解决方法(0)

NestJS:如何在 canActivate 中模拟 ExecutionContext

我在 Guard 中间件中模拟 ExecutionContext 时遇到了麻烦。

这是我的 RoleGuard 扩展 JwtGuard

@Injectable()
export class RoleGuard extends JwtAuthGuard {
 ...
 async canActivate(context: ExecutionContext): Promise<boolean> {
    const request = context.switchToHttp().getRequest();
    const params = request.params;

    ...
 }
}
Run Code Online (Sandbox Code Playgroud)

这就是我在单元测试中所尝试的。

let context: ExecutionContext = jest.genMockFromModule('@nestjs/common');
  
context.switchToHttp = jest.fn().mockResolvedValue({
  getRequest: () => ({
   originalUrl: '/',
   method: 'GET',
   params: undefined,
   query: undefined,
   body: undefined,
  }),
  getResponse: () => ({
    statusCode: 200,
  }),
});
    
jest.spyOn(context.switchToHttp(), 'getRequest').mockImplementation(() => {
 return Promise.resolve(null);
});
Run Code Online (Sandbox Code Playgroud)

我收到了这种错误。

Cannot spy the getRequest property because it …
Run Code Online (Sandbox Code Playgroud)

unit-testing jestjs nestjs

6
推荐指数
2
解决办法
1406
查看次数

标签 统计

jestjs ×1

nestjs ×1

unit-testing ×1