[英]Is it possible to mock typescript decorator?
给定我有方法装饰器,例如
class Service {
@LogCall()
doSomething() {
return 1 + 1;
}
}
是否可以在单元测试中模拟@LogCall
装饰器,因此将其不应用于模拟逻辑?
我正在寻找适用于任何打字稿装饰器的通用解决方案,因为可以更新您的装饰器以检查window.disableLogDecorator
标志或在测试过程中将其关闭的方法,但这不是可重用的解决方案。
当然,我们的用例比提供的示例要复杂得多-我们有@memoizeSelector
应用于ngrx/store
选择器,因此只有在更新特定状态部分时才调用它们。 由于我们在测试中模拟状态的方式, @memoizeSelector
破坏了测试,因此理想情况下我们希望将其禁用。
我怀疑装饰器是否有任何模拟物。 您可以添加静态开关并在装饰器内部处理它,或创建可配置的装饰器工厂(但仍是静态的):
@LogCall(LogCallFactory)
export function LogCall(factory:Function):Function
{
return function(target:Object, propertyKey:string, descriptor:TypedPropertyDescriptor<any>)
{
return factory(target, propertyKey, descriptor);
}
}
装饰器是在编译时编写的,因此可能可以使用条件编译。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.