2016-12-23 4 views
0

メソッドを監視するときは、Throw(元の実装を使用)またはcallFake(カスタム実装を使用)を呼び出すことができます。ジャスミンにはアフターアドバイスがありますか?

callThroughと似た動作がありますが、呼び出し元に返す前にその戻り値を検査/変更します。

は、だから私はこのような何かを行うことができます。

spyOn(foo, "fetch").and.afterCall(function(result) { 
    expect(result).toBeDefined(); 
    result.bar = "baz"; 
    return result; 
}); 

を今最も簡単な方法は、このような何かやっている:

var original = foo.fetch; 
foo.fetch = function() { 
    var result = original.apply(this, arguments); 
    expect(result).toBeDefined(); 
    result.bar = "baz"; 
    return result; 
} 

今、私は手動でスパイを復元する必要があるため、多少迷惑ですフレームワークが自動的に私のためにそれを行うのではなく。

答えて

0

ジャスミンにはアフターアドバイススパイがありますか?

一般的には:

あなたはしかし、そのような機能をSpyStrategy objectを拡張することができます:

this.callThroughAndModify = function(resultModifier) { 
    var result; 

    plan = function() { 
    result = originalFn.apply(this, arguments); 
    return resultModifier(result); 
    }; 

    return getSpy(); 
}; 

あなたは上記SpyStrategyファイルのクローンを作成し、そのメソッドを挿入するようにしました。

使用法:

var obj = { 
    fn: function(a) { return a * 2; } 
}; 

spyOn(obj, "fn").and.callThroughAndModify(function(result) { 
    console.log("Original result: ", result); 
    return 1; 
}); 

expect(obj.fn(2)).toBe(1); 

欠点:

前に、そのスクリプトをロードするためにきました
関連する問題