ゲッターがTypeScriptのセッターであるユニットテストを行うと、それらのゲッターとセッターをスパイする方法が見つかりません。代わりに、オブジェクトはすぐに評価されます。ユニットテストにジャスミンを使用しています。
まだサポートされていませんが、 ゲッターのサポート にジャスミンの問題があります。
今すぐサポートが本当に必要な場合は、 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);
}
}
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();
});
私はそれらのゲッターとセッターをスパイする方法を見つけることができません。代わりに、オブジェクトはすぐに評価されます。
それはジャスミンによってサポートされていません。主なオプションは、関数呼び出しにリファクタリングすることですOR拡張ジャスミン
ここでの解決策は役に立ちました。ゲッターをスパイする代わりに、それをオーバーライドしてテストのリターンを変更します。