我如何窥探打字稿获取者和制定者?

时间:2015-11-06 21:36:26

标签: typescript jasmine getter-setter

当我进行单元测试时,我的getter是Typescript的setter,我无法找到一种方法来监视那些getter和setter。而是立即评估对象。我正在使用Jasmine进行单元测试。

4 个答案:

答案 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,只是覆盖它来修改返回以进行测试。

https://stackoverflow.com/a/26888312/1341825

相关问题