【问题标题】:How to test that a function is wrapped with a decorator (javascript)如何测试函数是否用装饰器包装(javascript)
【发布时间】:2017-08-27 12:48:04
【问题描述】:

我在我的项目中编写并使用了一个装饰器,现在我正在尝试测试用装饰器包装的函数是否用装饰器包装。

我想我可以测试装饰器中正在发生的事情,我已经知道该怎么做,但我更喜欢完全模拟装饰器并断言函数正在被它包裹。

有谁知道怎么做(希望是 sinon/chai)?

【问题讨论】:

  • 检查装饰器应该与被装饰函数/类共享的功能
  • Offtop。装饰器不是 ES7 的特性。阶段2。 github.com/tc39/proposal-decorators
  • 我不想检查装饰器是否在做某事,我正在尝试对其进行单元测试。 @Artin 你是对的,但我的问题仍然存在,我应该如何编辑问题以反映这一点?
  • @BenHare 不要在标题或正文中说 ES7,因为它不是 ES7(而是 ES2016)。它可能是 ES2017 的一部分,但仍处于第 2 阶段。
  • 这不是题外话。它只是标记不正确。 @Artin,只需使用适当的标签(如果有)编辑问题,或者删除有问题的标签。无需引起骚动。

标签: javascript sinon chai ecmascript-next


【解决方案1】:

没有关于它们被任何特定函数装饰的对象的元数据 - 装饰器只是语法糖,也可以以不同的方式应用。

所以是的,断言装饰器中应该发生的事情确实发生了是唯一的方法。您可以模拟装饰器并通过设置特定标志甚至检查装饰器的参数和返回值来显式测试它是否已应用,但您可能不应该这样做。装饰器是一个实现细节,不要测试它们 - 测试装饰器提供的行为。

【讨论】:

  • 好的,感谢您的帮助,我想在返回其他方式之前先询问是否可能。
猜你喜欢
  • 1970-01-01
  • 2011-12-20
  • 2021-01-20
  • 2018-01-12
  • 2018-03-07
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
相关资源
最近更新 更多