私が単体テストをするとき、ゲッターはTypescriptのセッターですが、私はゲッタとセッターを偵察する方法を見つけることができません。代わりに、オブジェクトはすぐに評価されます。私はユニットテストにジャスミンを使用しています。Typescript getterとsetterをspyOnするにはどうしたらいいですか?
8
A
答えて
3
まだサポートされていませんが、supporting gettersのジャスミン問題があります。あなたは本当に今のサポートが必要な場合は、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
私はこれらのゲッタとセッタを偵察する方法を見つけることができません。代わりに、オブジェクトはすぐに評価されます。
これはJasmineではサポートされていません。主なオプションは関数呼び出しにリファクタリングするかジャスミンを拡張することです
6
spyOnProperty
はジャスミンで利用可能になりました:
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();
});
0
私は解決策を見つけましたここに役立つ。 getterを監視するのではなく、単にそれをオーバーライドしてテストの戻り値を変更します。
関連する問題
https://stackoverflow.com/questions/20879990の重複 –