bar()
がユニットテストからfoo()
内で呼び出されることを確認したいと思います。
Sinon spies が適切かもしれないと思ったが、それらの使用法がわからない。
メソッドが呼び出されたことを確認する方法はありますか?おそらくbar()
呼び出しで使用される引数を抽出することもできますか?
var spy = sinon.spy(foo);
function foo(){
bar(1,2,3);
}
function bar(){ }
foo();
// what to do with the spy?
あなたの場合、bar
が呼び出されたかどうかを確認しようとしているので、bar
ではなくfoo
をスパイしたいです。
doc で説明されているとおり:
function bar(x,y) {
console.debug(x, y);
}
function foo(z) {
bar(z, z+1);
}
// Spy on the function "bar" of the global object.
var spy = sinon.spy(window, "bar");
// Now, the "bar" function has been replaced by a "Spy" object
// (so this is not necessarily what you want to do)
foo(1);
bar.getCall(0).args => should be [1,2]
ここで、関数の内部をスパイすると、「foo」のテストがその実装に強く結び付けられるため、通常の "mockist vs Classical" の議論に陥ります。
代わりにバーをスパイしたかったのではないかとエイドリアンに同意します。
var barSpy = sinon.spy(bar);
次に、それが一度呼び出されたことを確認します
assert(barSpy.calledOnce);
まったく呼ばれた
assert(barSpy.called)
X回呼び出される
assert.equal(barSpy.callCount, x);
スパイの最初の呼び出しから引数を抽出する場合:
var args = barSpy.getCalls()[0].args
その後、これらの引数を使用して必要な処理を実行できます。
Fooではなくbarをスパイしてはいけませんか?
var spy = sinon.spy(bar)
Fooを呼び出す:
foo()
チェックバーが呼び出されました:
console.log(spy.calledOnce)