我如何监视打字稿的getter和setter?

hda*_*zhu 10 getter-setter jasmine typescript

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

Lao*_*jin 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();
});
Run Code Online (Sandbox Code Playgroud)


Mar*_*cka 3

目前尚不支持,但支持 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);
    }
}
Run Code Online (Sandbox Code Playgroud)