Verifying function call and inspecting arguments using sinon spies

限于喜欢 提交于 2019-11-29 03:02:43

In your case, you are trying to see if bar was called, so you want to spy bar rather than foo.

As described in the 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]

Now, spying on the internals of the function strongly couples your test of "foo" to its implementation, so you'll fall into the usual "mockist vs classical" debate.

I agree with Adrian in saying that you probably wanted to spy on bar instead.

var barSpy = sinon.spy(bar);

Then to check that it was called once

assert(barSpy.calledOnce);

Just called at all

assert(barSpy.called)

Called x amount of times

assert.equal(barSpy.callCount, x);

If you want to extract the arguments from the first call of the spy:

var args = barSpy.getCalls()[0].args

Then you can do what you want with those arguments.

Adrian Lynch

Shouldn't you be spying on bar, rather than foo?

var spy = sinon.spy(bar)

Call foo:

foo()

Check bar was called:

console.log(spy.calledOnce)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!