我想在我的 NestJS e2e(集成)测试中模拟 JWT 身份验证。我在我的业务逻辑中使用注入(inject)的 token 数据,我不想在我的测试代码中插入凭据。
我根据 Nest authentication docs 实现了 JWT 身份验证.我使用与 @User
类似的装饰器示例中的装饰器,并在我的业务逻辑中使用有关 User 对象的信息。
@Post()
async myPostEndpoint(@Body() body: PostBody, @User() user: MyUser){
// do stuff using user properties
}
当使用 Nest testing docs 中所示的 supertest 测试我的应用程序时,我不想发出真正的身份验证请求,因为我需要在我的版本控制系统中保留凭据。
我希望能够覆盖提供者以返回测试用户。但是想不通。
我尝试覆盖
AuthService
的validateClient
和 login
使用 overrideProvider + useClass/useFactory/useValue
返回默认用户如Nest testing docs 中所示.我还尝试了 JwtStrategy
中的覆盖方法和 LocalStrategy
,但请求仍返回 401 - 未经授权。
最佳答案
在您的 overrideGuard(AuthGuard('jwt')).useValue()
您可以将功能添加到您的 canActivate()
函数如下所示:
canActivate (context: ExecutionContext) => {
const req = context.switchToHttp().getRequest();
req.user = myCustomUserObject;
return true;
}
在哪里 myCustomUserObject
是 req.user
的期望值供服务器处理。
关于typescript - NestJS 在 e2e 测试中模拟 JWT 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57629191/