鉴于我有方法装饰器,例如
class Service {
@LogCall()
doSomething() {
return 1 + 1;
}
}
是否可以在单元测试中模拟@LogCall
装饰器,因此不会应用或应用模拟逻辑?
我正在为任何打字稿装饰器寻找通用解决方案,因为可以更新装饰器以检查window.disableLogDecorator
标志或在测试期间关闭它的东西,但这不是可重复使用的解决方案。
我们的用例当然比提供的示例复杂得多 - 我们将@memoizeSelector
应用于ngrx/store
选择器,因此只有在特定的状态部分是更新。由于我们在测试中模拟状态,@memoizeSelector
打破了我们的测试,所以理想情况下我们要禁用它。
答案 0 :(得分:-2)
我怀疑装饰者是否有任何嘲笑。您可以添加静态开关并在装饰器内处理它或创建可配置的装饰工厂(但仍然是静态的):
@LogCall(LogCallFactory)
export function LogCall(factory:Function):Function
{
return function(target:Object, propertyKey:string, descriptor:TypedPropertyDescriptor<any>)
{
return factory(target, propertyKey, descriptor);
}
}
装饰器是在编译时编写的,因此可能使用条件编译。