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(未经授权的异常);
});
});
});
受到谢谢的启发,你的回答激励了我,现在我成功了!