gpt4 book ai didi

angular - 是否可以模拟 typescript 装饰器?

转载 作者:搜寻专家 更新时间:2023-10-30 22:03:40 27 4
gpt4 key购买 nike

鉴于我有方法装饰器,例如

class Service {
@LogCall()
doSomething() {
return 1 + 1;
}
}

是否可以在单元测试中模拟 @LogCall 装饰器,这样它就不会被应用或与模拟逻辑一起应用?

我正在寻找适用于任何 typescript 装饰器的通用解决方案,因为可以更新您的装饰器以检查 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);
}
}

装饰器是在编译时编写的,因此可能会使用条件编译。

关于angular - 是否可以模拟 typescript 装饰器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45100086/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com