小编mgo*_*mgo的帖子

使用请求对 NestJS 控制器进行单元测试

我的控制器函数定义如下所示: async login(@Req() request, @Body() loginDto: LoginDto): Promise<any> {

我如何准备/模拟请求以提供来自 Jest 测试的函数的第一个参数?在函数内部,我正在使用request.res.set. 我应该以某种方式将真实的 Request 对象传递给函数,然后检查是否设置了标头,或者模拟整个 Request 对象并检查是否调用了 set 函数?

unit-testing express nestjs

5
推荐指数
2
解决办法
4651
查看次数

使用passport-jwt在nestJs框架中进行角色验证

我基于该文章实现了身份验证策略:https://docs.nestjs.com/techniques/authentication.但我想在检查角色时扩展JwtStrategy.最简单的方法是添加对oles的检查,jwt.strategy.ts因为已经有用户基于JWT有效负载.

但我不知道如何将额外的参数传递给validate函数.

我想要实现的内容:

async validate(payload: JwtPayload, done: Function, role: string) {        
    const user = await this.authService.validateUser(payload);
    if (!user || user.role !== role) {
        return done(new UnauthorizedException(), false);
    }
    done(null, user);
}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何将额外的role参数传递给该函数.我正在使用装饰器@UseGuards(AuthGuard('jwt'))来启用防护.我想要实现的是在那里添加一个额外的参数role字符串并在JWTStrategy中使用它.

实现它的最简单方法是什么?或者我需要实施两个单独的守卫?

编辑:其实我不知道AuthGuard自动附加用户请求.解决方案只是简单地从@ hdias2310指向的url实现RoleGuard.(https://docs.nestjs.com/guards)

typescript passport.js nestjs

2
推荐指数
1
解决办法
2619
查看次数

标签 统计

nestjs ×2

express ×1

passport.js ×1

typescript ×1

unit-testing ×1