繁体   English   中英

可以模拟打字稿装饰器吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM