【发布时间】:2016-01-13 21:48:57
【问题描述】:
如何使用 jasmine 监视 getter 属性?
var o = { get foo() {}, };
spyOn(o, 'foo').and.returnValue('bar'); // Doesn't work.
这也不起作用 AFAICT:
spyOn(Object.getOwnPropertyDescriptor(o, 'foo'), 'get').and.returnValue('bar');
【问题讨论】:
-
从this similar question 的讨论中,你不能。 Getter 和 setter 不被视为标准方法(例如,它们不需要作为函数调用。)
-
也许您可以根据不同的对象状态测试检索值的结果。
-
根据这里的cmets,显然没有实现,但理论上也不是不可能。
spyOn(Object.getOwnPropertyDescriptor(o, 'foo'), 'get')不起作用的原因是因为spyOn将对象的属性重写为包装现有函数的新函数。更改getOwnPropertyDescriptor返回的属性描述符对象不会更改实际属性。但是,您可以更改 Jasmine 以检测 setter/getter 并使用defineProperty实际重写该属性。如果对您很重要,也许可以打开一个功能请求? -
@apsillers 请让您的评论成为答案。
-
我已经打开了一个功能请求:github.com/jasmine/jasmine/issues/943
标签: javascript jasmine