Проверка вызова функции и проверка аргументов с помощью sinon spies
Я хотел бы проверить это bar()
внутри foo()
из моего модульного теста.
Я понял, что Синон шпионов может быть и подходит, но я не знаю как их использовать.
есть ли способ проверить, что метод вызывается? Возможно, даже извлечение аргументов, используемых в bar()
звонок?
var spy = sinon.spy(foo);
function foo(){
bar(1,2,3);
}
function bar(){ }
foo();
// what to do with the spy?
3 ответов
в вашем случае, вы пытаетесь увидеть, если 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 " с его реализацией, поэтому вы попадете в обычное "мокист против классика" обсуждения.
Я согласен с Адрианом в том, что вы, вероятно, хотели шпионить за баром вместо этого.
var barSpy = sinon.spy(bar);
затем, чтобы проверить, что он был вызван один раз
assert(barSpy.calledOnce);
просто позвонил вообще
assert(barSpy.called)
называется X количество раз
assert.equal(barSpy.callCount, x);
если вы хотите извлечь аргументы из первого вызова шпион:
var args = barSpy.getCalls()[0].args
тогда вы можете делать то, что хотите с этими аргументами.
разве вы не должны шпионить за баром, а не фу?
var spy = sinon.spy(bar)
вызов foo:
foo()
Check bar был вызван:
console.log(spy.calledOnce)