use*_*702 6 unit-testing node.js typescript jestjs
我想为具有 Catch 方法的 Nest JS Filter 编写单元测试。如何传递/模拟发生异常时传递的参数。如何断言 logger.error 被调用。
Jest用于单元测试
这是捕获所有异常的 Nest JS Filter 代码。
@Catch()
export class AllExceptionsFilter implements ExceptionFilter {
constructor(private logger: AppLoggerService) {}
catch(exception: any, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse();
const request = ctx.getRequest();
const message = {
Title: exception.name,
Type: 'Error',
Detail: exception.message,
Status: 'Status',
Extension: '',
};
this.logger.error(message, '');
const status =
exception instanceof HttpException
? exception.getStatus()
: HttpStatus.INTERNAL_SERVER_ERROR;
response.status(status).send({
statusCode: status,
timestamp: new Date().toISOString(),
path: request.url,
});
}
}
Run Code Online (Sandbox Code Playgroud)
我现有的单元测试代码如下所示,需要在 catch 方法上编写测试。
describe('AllExceptionsFilter', () => {
let allExceptionsFilter: AllExceptionsFilter;
let appLoggerService: AppLoggerService;
beforeEach(async () => {
const loggerOptions = { appPath: process.cwd() }
const module: TestingModule = await Test.createTestingModule({
providers: [AllExceptionsFilter,
{
provide: AppLoggerService,
useValue: new AppLoggerService(loggerOptions, 'AllExceptionsFilter'),
},
],
}).compile();
allExceptionsFilter = module.get<AllExceptionsFilter>(AllExceptionsFilter);
});
it('should be defined', () => {
expect(allExceptionsFilter).toBeDefined();
});
});
Run Code Online (Sandbox Code Playgroud)
单元测试的测试覆盖率应为100%。
Pet*_*kin -1
您可以在测试所有服务、控制器等时测试过滤器的 catch 方法。无需模拟整个 catch 流程,因为它位于 Nest.js 部分。你的测试将如下所示
import { ConfigModule } from '@nestjs/config';
import { Test, TestingModule } from '@nestjs/testing';
import configuration from '../config';
import { IneligibleExceptionFilter } from './ineligible.filter';
describe('IneligibleExceptionFilter', () => {
let service: IneligibleExceptionFilter;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [ConfigModule.forRoot({ isGlobal: true, load: [configuration] })],
providers: [IneligibleExceptionFilter],
}).compile();
service = module.get<IneligibleExceptionFilter>(IneligibleExceptionFilter);
});
it('should be defined', () => {
expect(service).toBeDefined();
});
describe('catch', () => {
it('my test1', () => {
// some logic here
});
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2909 次 |
| 最近记录: |