Skip to content Skip to sidebar Skip to footer

How To Spy A Function With Sinon.js That Is In The Same Js File As The Function Under Test

I have a problem with Sinon.js while trying to spy a function that is in the same javascript file as the function that I want to test. Furthermore I assert that the spied function

Solution 1:

Unfortunately the test fails

That is because one.some_method() in mock_test.js invokes another_method inside the closure one.some_method() is holding over the content of one.js and not one.another_method in mock_test.js.

Illustration by example

Lets re-write one.js to:

vara='I am exported';
varb='I am not exported';

function foo() {
    console.log(a);
    console.log(this.b)
}

module.exports.a=a;
module.exports.foo=foo;

and mock_test.js to:

var one = require('./one');

console.log(one); // { a: 'I am exported', foo: [Function: foo] }

one.a = 'Charles';
one.b = 'Diana';

console.log(one); // { a: 'Charles', foo: [Function: foo], b: 'Diana' }

Now if we invoke one.foo() it will result in:

I am exported
Diana

The I am exported is logged to the console because console.log(a) inside foo points to var a inside the closure foo is holding over the contents of one.js.

The Diana is logged to the console because console.log(this.b) inside foo points to one.b in mock_test.js.

So what do you need to do to make it work?

You need to change:

var some_method = function(){
  console.log('one: some method')
  another_method()
}

to:

var some_method = function(){
  console.log('one: some method')
  this.another_method()
}

Post a Comment for "How To Spy A Function With Sinon.js That Is In The Same Js File As The Function Under Test"