node.js - 如何使用 Jest 在nest.js 应用程序上测试标头请求
问题描述
我正在尝试用 jest 测试一个嵌套应用程序。我有一个调用服务的警卫,在该服务上我必须检查是否存在确定的标头,但我找不到任何有关如何完成此操作的文档。基本上我正在尝试从nest.js 测试canActivate 方法
这是我来自nest.js 的身份验证守卫
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService) { }
canActivate(context: ExecutionContext): boolean | Promise<boolean> | Observable<boolean> {
const request = context.switchToHttp().getRequest();
return this.authService.isValidRequest(request);
}
}
我想用玩笑测试下面的方法,不知道我是否需要模拟一个请求。如果标头已声明,则该方法将返回 true,否则返回 false。
我不知道如何在单元测试中测试标题。
export class AuthService {
constructor() { }
async isValidRequest(req: Request): Promise<boolean> {
const userId = req.headers['user-id'];
if (userId != 'undefined') {
// I'm going to call another service here
return true;
}
return false;
}
解决方案
老实说,我建议对AuthGuardService
过度测试进行单元测试AuthGuard
,只是因为ExecutionContext
它有点像一个对象。对于一个超级简单的用例,你可以做
describe('AuthGuardService', () => {
let service: AuthGuardService;
beforeEach(async () => {
const modRef = await Test.createTestingModule({
providers: [
AuthGuardService,
{ provide: AuthService, useValue: authServiceMock}
],
}).compile();
service = modRef.get(AuthGuardService);
});
describe('isValidRequest', () => {
it('should return true', async () => {
expect(
await service.isValidRequest({
headers: {'user-id': 'some value that is right'}
} as any
)).toBe(true);
});
it('should return false', async () => {
expect(
await service.isValidRequest({
headers: {'user-id': 'some value that is wrong'}
} as any
)).toBe(false);
});
});
});
这as any
是为了防止打字稿抱怨。你在这里关心的只是有一个headers
财产
推荐阅读
- java - AsyncFutureCompletionExecutor vs Netty 事件循环
- android - 无法使用 Gradle 6.1.1 解析 junit-jupiter-params:5.6.2 和 junit-jupiter-engine:5.6.2
- javascript - 使用可选链接接收 TypeError:无法读取未定义的属性“数据”
- visual-studio-code - vscode 扩展没有响应的原因
- sql - 查找某个父级在一定范围内创建的记录数
- apache-spark - 如何使用 spark sql 在 groupby 中进行选择
- python - 如何动态循环列表
- r - 闪亮服务器的 ShinyApps 文件对入侵者安全吗?
- dynamics-business-central - Business Central API 扩展:如何将插入触发器连接到 API 自定义页面?
- python-3.x - 我想抓取所有公司名称链接,但只获得前 20 个链接