Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

211
Views
Verifying function call and inspecting arguments using sinon spies

I would like to verify that bar() is called inside foo() from my unit test.

I figured that Sinon spies might be suitable, but I don't know how to use them.

Is there any way to check that the method is called? Perhaps even extracting the arguments used in the bar() call?

var spy = sinon.spy(foo);

function foo(){
    bar(1,2,3);
}

function bar(){ }

foo();

// what to do with the spy?

http://jsfiddle.net/8by9jg07/

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

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.

over 4 years ago · Santiago Trujillo Report

0

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.

over 4 years ago · Santiago Trujillo Report

0

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)
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!