我想验证我的单元测试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?
答案 0 :(得分:26)
在您的情况下,您正试图查看是否调用了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]
现在,监视函数的内部结构强烈地将你的测试结果与#34; foo"它的实施,所以你将陷入通常的"mockist vs classical"辩论。
答案 1 :(得分:9)
我同意阿德里安的说法,你可能想要监视吧。
var barSpy = sinon.spy(bar);
然后检查它是否被调用一次
assert(barSpy.calledOnce);
刚刚调用
assert(barSpy.called)
被调用x次
assert.equal(barSpy.callCount, x);
如果你想从第一次调用spy中提取参数:
var args = barSpy.getCalls()[0].args
然后你可以用这些论点做你想做的事。
答案 2 :(得分:1)
难道你不是在监视吧,而不是foo吗?
var spy = sinon.spy(bar)
拨打foo:
foo()
调用条形码:
console.log(spy.calledOnce)