スパイ
ジャスミンのスパイと呼ばれるテスト二重の機能を持ってい
ここに私のコードです。スパイは、 関数をスタブし、その呼び出しとすべての引数を追跡できます。スパイは、記述されたブロックまたは定義されたブロックにある のみ存在し、各スペックの後には、 が削除されます。スパイと相互作用する特別なマッチャーがあります。 Jasmine 2.0ではこの構文が変更されました。スパイが呼び出された場合、 toHaveBeenCalledマッチャーはtrueを返します。引数リスト がスパイへの記録された呼び出しのいずれかと一致する場合、 toHaveBeenCalledWith matcherはtrueを返します。
describe("A spy", function() {
var foo, bar = null;
beforeEach(function() {
foo = {
setBar: function(value) {
bar = value;
}
};
spyOn(foo, 'setBar');
foo.setBar(123);
foo.setBar(456, 'another param');
});
it("tracks that the spy was called", function() {
expect(foo.setBar).toHaveBeenCalled();
});
it("tracks all the arguments of its calls", function() {
expect(foo.setBar).toHaveBeenCalledWith(123);
expect(foo.setBar).toHaveBeenCalledWith(456, 'another param');
});
it("stops all execution on a function", function() {
expect(bar).toBeNull();
});
});
私は答えを追加したいが、私はそれがほとんどの意見だと思います。私にとって、これはコードの匂いです。ユニットテストは、個々のユニット(モジュール、関数、クラス)をプログラムの残りの部分とは独立してテストします。基本的に、彼らは入力を与えれば出力を得ることをテストします。入れ子にされた呼び出しを移動し、代わりにテスト用の合成ツールを使用することをお勧めします。パイプのようなものです。 'pipe(a、b)(inputToA)'はモックやスパイのない完全にテストされた3つの関数を与えます。これは多くの人が握っている意見ではないので、塩の穀物でそれを取る。 – ktilcu