Jestjs 如何在Jest测试框架中创建mockObject而不必担心对象';s属性
我正在使用Jestjs 如何在Jest测试框架中创建mockObject而不必担心对象';s属性,jestjs,nestjs,Jestjs,Nestjs,我正在使用NestJS和Jest框架来测试NestJS拦截器。我想为拦截器编写一个单元测试。拦截器函数要求两个参数。我已经创建了一个CallHandler的模拟对象,因为它需要最少一个必需参数。但是,我想创建一个ExecutionContext的spy/mock对象,它需要许多参数。如何做到这一点 拦截器看起来像: @Injectable() 导出类GetFlowDefinitionInterceptor实现NestInterceptor{ 公共截获(_context:ExecutionCont
NestJS
和Jest
框架来测试NestJS拦截器
。我想为拦截器
编写一个单元测试。拦截器函数要求两个参数。我已经创建了一个CallHandler
的模拟对象,因为它需要最少一个必需参数。但是,我想创建一个ExecutionContext
的spy/mock对象,它需要许多参数。如何做到这一点
拦截器看起来像:
@Injectable()
导出类GetFlowDefinitionInterceptor实现NestInterceptor{
公共截获(_context:ExecutionContext,next:CallHandler):可观察{
返回next.handle().pipe(
映射(流=>{
flow.name='新名称'
回流;
}),
);
}
}
测试看起来像
it('interceptor test',()=>{
让_context:ExecutionContext={};肯定不是最好的选择,但您可以编写let result=new GetFlowDefinitionInterceptor().intercept(_contextas any,next)
来忽略编译问题。(任何都非常重要)当然不是最好的选择,但是您可以编写让result=new GetFlowDefinitionInterceptor().intercept(_contextas any,next);
来忽略编译问题。(任何都非常重要)您可以在不测试拦截器的情况下测试逻辑
1)分离并测试逻辑:
导出类流定义映射{
映射(流:流定义){
返回{…流,名称:'新名称'};
}
}
它('它应该替换名称',()=>{
const result=new FlowDefinitionMap().map({name:'old name'});
expect(result.name).toEqual('newname');
});
2)在拦截器中使用新的FlowDefinitionMap
:
@Injectable()
导出类GetFlowDefinitionInterceptor实现NestInterceptor{
公共截获(_context:ExecutionContext,next:CallHandler):可观察{
const flowDefinitionMap=新的flowDefinitionMap();
返回next.handle().pipe(
映射(流=>{
返回flowDefinitionMap.map(流);
}),
);
}
}
您可以在不测试拦截器的情况下测试逻辑
1)分离并测试逻辑:
导出类流定义映射{
映射(流:流定义){
返回{…流,名称:'新名称'};
}
}
它('它应该替换名称',()=>{
const result=new FlowDefinitionMap().map({name:'old name'});
expect(result.name).toEqual('newname');
});
2)在拦截器中使用新的FlowDefinitionMap
:
@Injectable()
导出类GetFlowDefinitionInterceptor实现NestInterceptor{
公共截获(_context:ExecutionContext,next:CallHandler):可观察{
const flowDefinitionMap=新的flowDefinitionMap();
返回next.handle().pipe(
映射(流=>{
返回flowDefinitionMap.map(流);
}),
);
}
}
看看这个可以帮助你的问题:看看这个可以帮助你的问题:谢谢这个选项,但是,我没有在Jest代码覆盖率中涵盖拦截器行。我需要测试callHandler返回值。谢谢这个选项,但是,我没有在Jest代码覆盖率中涵盖拦截器行。我需要测试callHandler返回的值。