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返回的值。