我如何监视 Typescript 的 getter 和 setter?
How do I spyOn Typescript getters and setters?
当我对我的 getter 是 Typescript 的 setter 进行单元测试时,我找不到监视这些 getter 和 setter 的方法。相反,该对象会立即得到评估。我正在使用 Jasmine 进行单元测试。
I cannot find a way to spy on those getters and setters. Instead, the object immediately gets evaluated.
茉莉花不支持。您的主要选择是重构为函数调用或扩展 jasmine
尚不支持,但 supporting getters 存在 Jasmine 问题。
如果你现在确实需要支持,可以扩展SpyRegistry.js file and add the code that 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);
}
}
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();
});
我发现此处的解决方案很有帮助。不是监视 getter,而是覆盖它以修改 return 进行测试。
当我对我的 getter 是 Typescript 的 setter 进行单元测试时,我找不到监视这些 getter 和 setter 的方法。相反,该对象会立即得到评估。我正在使用 Jasmine 进行单元测试。
I cannot find a way to spy on those getters and setters. Instead, the object immediately gets evaluated.
茉莉花不支持。您的主要选择是重构为函数调用或扩展 jasmine
尚不支持,但 supporting getters 存在 Jasmine 问题。
如果你现在确实需要支持,可以扩展SpyRegistry.js file and add the code that 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);
}
}
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();
});
我发现此处的解决方案很有帮助。不是监视 getter,而是覆盖它以修改 return 进行测试。