当我进行单元测试时,我的getter是Typescript的setter,我无法找到一种方法来监视那些getter和setter。而是立即评估对象。我正在使用Jasmine进行单元测试。
答案 0 :(得分:13)
spyOnProperty
现已在Jasmine中提供:
const foop = {
get value() {},
set value(v) {}
};
it('can spy on getter', () => {
spyOnProperty(foop, 'value', 'get').and.returnValue(1);
expect(foop.value).toBe(1);
});
it('and on setters', () => {
const spiez = spyOnProperty(foop, 'value', 'set');
foop.value = true;
expect(spiez).toHaveBeenCalled();
});
答案 1 :(得分:3)
目前尚不支持,但supporting getters存在Jasmine问题。
如果您现在真的需要支持,可以扩展SpyRegistry.js文件并添加apsillers建议的代码:
this.spyOnProperty = function(obj, methodName, accessType) {
...
var desc = Object.getPropertyDescriptor(obj, methodName);
if(desc[accessType]) { // "get" or "set" exists on the property
var spy = j$.createSpy(methodName, desc[accessType]);
desc[accessType] = spy;
Object.defineProperty(obj, methodName, desc);
}
}
答案 2 :(得分:2)
我无法找到一种方法来监视那些吸气者和二传手。相反,该对象立即被评估。
Jasmine不支持。您的主要选择是重构函数调用或扩展jasmine
答案 3 :(得分:0)
我发现这里的解决方案很有帮助。而不是监视getter,只是覆盖它来修改返回以进行测试。