如何使用spyOn Typescript获取器和设置器?

如何使用spyOn Typescript获取器和设置器?,typescript,jasmine,getter-setter,Typescript,Jasmine,Getter Setter,当我单元测试我的getter是Typescript的setter时,我找不到监视这些getter和setter的方法。相反,对象会立即得到计算。我使用Jasmine进行单元测试 我找不到办法监视那些能手和二传手。相反,对象会立即得到计算 这是茉莉花不支持的。您的主要选择是重构为函数调用或扩展jasmine,它目前还不受支持,但它存在一个jasmine问题 如果现在确实需要支持,可以扩展文件并添加建议的代码: this.spyOnProperty = function(obj, methodNam

当我单元测试我的getter是Typescript的setter时,我找不到监视这些getter和setter的方法。相反,对象会立即得到计算。我使用Jasmine进行单元测试

我找不到办法监视那些能手和二传手。相反,对象会立即得到计算


这是茉莉花不支持的。您的主要选择是重构为函数调用或扩展jasmine,它目前还不受支持,但它存在一个jasmine问题

如果现在确实需要支持,可以扩展文件并添加建议的代码:

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,不如重写它来修改测试的返回


我认为,到2020年,这一数字仍将保持不变。遇到这样的测试框架限制是。。。基本上只是尴尬:/我正在尝试这个,spyOnProperty(组件,'name','get')。和.returnValue(1);expect(组件名称).toBe(1);但它不断抛出错误:component.name不是函数如果上面的代码不起作用,请尝试升级Jasmine?