使用 sinon spies 验证函数调用和检查参数
Verifying function call and inspecting arguments using sinon spies
我想验证我的单元测试 foo()
中是否调用了 bar()
。
我觉得Sinon spies可能合适,但我不知道怎么用。
有什么方法可以检查是否调用了该方法?甚至可能提取 bar()
调用中使用的参数?
var spy = sinon.spy(foo);
function foo(){
bar(1,2,3);
}
function bar(){ }
foo();
// what to do with the spy?
你不应该监视 bar 而不是 foo 吗?
var spy = sinon.spy(bar)
调用 foo:
foo()
调用了检查栏:
console.log(spy.calledOnce)
在你的例子中,你试图查看是否调用了 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" 辩论。
我同意 Adrian 的说法,您可能想监视 bar。
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()
。
我觉得Sinon spies可能合适,但我不知道怎么用。
有什么方法可以检查是否调用了该方法?甚至可能提取 bar()
调用中使用的参数?
var spy = sinon.spy(foo);
function foo(){
bar(1,2,3);
}
function bar(){ }
foo();
// what to do with the spy?
你不应该监视 bar 而不是 foo 吗?
var spy = sinon.spy(bar)
调用 foo:
foo()
调用了检查栏:
console.log(spy.calledOnce)
在你的例子中,你试图查看是否调用了 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" 辩论。
我同意 Adrian 的说法,您可能想监视 bar。
var barSpy = sinon.spy(bar);
然后检查是否调用了一次
assert(barSpy.calledOnce);
刚打过电话
assert(barSpy.called)
调用 x 次
assert.equal(barSpy.callCount, x);
如果您想从间谍的第一次调用中提取参数:
var args = barSpy.getCalls()[0].args
然后你就可以用这些参数做你想做的事了。