typescript - NestJS 在 e2e 测试中模拟 JWT 身份验证

标签 typescript unit-testing authentication mocking nestjs

我想在我的 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 测试我的应用程序时,我不想发出真正的身份验证请求,因为我需要在我的版本控制系统中保留凭据。

我希望能够覆盖提供者以返回测试用户。但是想不通。

我尝试覆盖 AuthServicevalidateClientlogin使用 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;
}
在哪里 myCustomUserObjectreq.user 的期望值供服务器处理。

关于typescript - NestJS 在 e2e 测试中模拟 JWT 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57629191/

相关文章:

javascript - 重新加载时保留数据 Angular 8

java - Spring 通过自定义身份验证提供程序记住我

node.js - Cypress 选择 HTML <select> 的特定子级

c++ - 白盒测试—— friend 还是预处理器?

python - 相当于 Django 用户配置文件的 Sudo

spring-mvc - LDAP - 上下文源的 AD 用户名密码配置

node.js - TypeScript - 无法在其他类型根目录中的类型覆盖中导入自身,TS7016

javascript - 在子组件的 ngAfterViewInit() 中调用时,父组件的元素上的 getElementById 返回 null

javascript - 如何通过代码清理使动态导入/需要依赖于变量?

unit-testing - 测试该方法在 Golang 的处理程序中被调用