【发布时间】:2017-12-19 09:14:06
【问题描述】:
鉴于我有方法装饰器,例如
class Service {
@LogCall()
doSomething() {
return 1 + 1;
}
}
是否可以在单元测试中模拟 @LogCall 装饰器,因此不会应用或应用模拟逻辑?
我正在寻找任何 typescript 装饰器的通用解决方案,因为可以更新您的装饰器以检查 window.disableLogDecorator 标志或在测试期间将其关闭,但这不是可重用的解决方案。
当然,我们的用例比提供的示例复杂得多 - 我们有 @memoizeSelector 应用于 ngrx/store 选择器,因此只有在更新特定状态部分时才会调用它们。由于我们在测试中模拟状态的方式,@memoizeSelector 会破坏我们的测试,因此理想情况下我们希望禁用它。
【问题讨论】:
-
是的,这是可能的,但您需要模拟导出装饰器的模块。你可以使用你的模块加载器来做到这一点,只要它足够灵活。例如,SystemJS 让你很容易做到这一点。请记住,装饰器只是一个函数。
标签: angular unit-testing typescript mocking decorator