Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何在nest中对guard进行单元测试?_Unit Testing_Jestjs_Nestjs - Fatal编程技术网

Unit testing 如何在nest中对guard进行单元测试?

Unit testing 如何在nest中对guard进行单元测试?,unit-testing,jestjs,nestjs,Unit Testing,Jestjs,Nestjs,我已经完成了控制器和服务的单元测试,如下所示: import { CatsController } from './cats.controller'; import { CatsService } from './cats.service'; describe('CatsController', () => { let catsController: CatsController; let catsService: CatsService; beforeEach(() =>

我已经完成了控制器和服务的单元测试,如下所示:

import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';

describe('CatsController', () => {
 let catsController: CatsController;
 let catsService: CatsService;

 beforeEach(() => {
   catsService = new CatsService();
   catsController = new CatsController(catsService);
 });

 describe('findAll', () => {
   it('should return an array of cats', async () => {
     const result = ['test'];
     jest.spyOn(catsService, 'findAll').mockImplementation(() => result);

     expect(await catsController.findAll()).toBe(result);
   });
 });
});

但我有一个全局保护,这个保护独立于任何控制器或服务,我不知道如何编写.spec文件。请注意,我有以下防护装置

从'@nestjs/common'导入{ExecutionContext,可注入,可激活,未经授权的dexception};
从“express”导入类型{Request};
@可注射()
导出类AuthenticatedGuard实现CanActivate{
canActivate(上下文:ExecutionContext):true |从不{
const req=context.switchToHttp().getRequest();
const isAuthenticated=req.isAuthenticated();
如果(!已验证){
抛出新的UnauthorizedException();
}
返回未经验证;
}
}
然后我的
authenticated.guard.spec.ts
是:

从'@golevelup/ts jest'导入{createMock};
从'@nestjs/common'导入{ExecutionContext,UnauthorizedException};
从“@/common/guards”导入{AuthenticatedGuard};
描述('AuthenticatedGuard',()=>{
让authenticatedGuard:authenticatedGuard;
在每个之前(()=>{
authenticatedGuard=新的authenticatedGuard();
});
它('应该定义',()=>{
expect(authenticatedGuard).toBeDefined();
});
描述('canActivate',()=>{
它('当用户经过身份验证时应返回true',()=>{
const mockContext=createMock();
mockContext.switchToHttp().getRequest.mockReturnValue({
//方法通过Passport库附加到'req'实例
已验证:()=>正确,
});
const canActivate=authenticatedGuard.canActivate(mockContext);
expect(canActivate)、toBe(true);
});
它('当用户未经身份验证时,应引发未经授权的(HTTP 401)错误',()=>{
const mockContext=createMock();
mockContext.switchToHttp().getRequest.mockReturnValue({
//方法通过Passport库附加到'req'实例
已验证:()=>错误,
});
const callCanActivate=()=>authenticatedGuard.canActivate(mockContext);
expect(callCanActivate).tothrower(未经授权的异常);
});
});
});

受到

谢谢的启发,你的回答激励了我,现在我成功了!