web-dev-qa-db-ja.com

TypeScriptのゲッターとセッターをスパイするにはどうすればよいですか?

ゲッターがTypeScriptのセッターであるユニットテストを行うと、それらのゲッターとセッターをスパイする方法が見つかりません。代わりに、オブジェクトはすぐに評価されます。ユニットテストにジャスミンを使用しています。

12
hdavidzhu

まだサポートされていませんが、 ゲッターのサポート にジャスミンの問題があります。

今すぐサポートが本当に必要な場合は、 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);
    }
}
3
Martin Vseticka

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();
});
16
Laoujin

私はそれらのゲッターとセッターをスパイする方法を見つけることができません。代わりに、オブジェクトはすぐに評価されます。

それはジャスミンによってサポートされていません。主なオプションは、関数呼び出しにリファクタリングすることですOR拡張ジャスミン

2
basarat

ここでの解決策は役に立ちました。ゲッターをスパイする代わりに、それをオーバーライドしてテストのリターンを変更します。

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

0
theUtherSide