【发布时间】:2019-12-28 22:48:02
【问题描述】:
我想在我的 NestJS e2e(集成)测试中模拟 JWT 身份验证。我在我的业务逻辑中使用注入的令牌数据,我不想在我的测试代码中插入凭据。
我根据Nest authentication docs 实现了 JWT 身份验证。我在示例中使用了与 @User 装饰器类似的装饰器,并在我的业务逻辑中使用了有关 User 对象的信息。
@Post()
async myPostEndpoint(@Body() body: PostBody, @User() user: MyUser){
// do stuff using user properties
}
在使用Nest testing docs 中所示的超测试测试我的应用程序时,我不想发出真正的身份验证请求,因为我需要在我的版本控制系统中保留凭据。
我希望能够覆盖提供者以返回测试用户。但想不通。
我尝试覆盖AuthService 的validateClient 和login 以使用overrideProvider + useClass/useFactory/useValue 返回默认用户,如Nest testing docs 所示。我还尝试了覆盖 JwtStrategy 和 LocalStrategy 中的方法,但请求仍然返回 401 - 未经授权。
【问题讨论】:
-
不幸的是,接受的答案中的实现不会模拟用户。相反,它会执行一个真正的身份验证请求
.post('/auth/login'),这是我想避免的,因为我需要将凭据放入我的测试代码中。 -
我想我在身份验证代码中添加了
process.env.NODE_ENV签入以处理这种情况。
标签: typescript unit-testing authentication mocking nestjs