I'm new Sinon. i'm unable to spy the private ajax function
library.jsfunction ajax () {
console.log("I'm a");
}
function getJSON() {
ajax();
console.log("I'm b");
}
exports.getJSON = getJSON;
var sinon = require('sinon');
var lib = require('./library');
describe('Tutor Test', function () {
it('getJSON Calling ajax', function (done) {
var ajax = sinon.spy(lib, 'ajax');
lib.getJSON();
ajax.restore();
sinon.assert.calledOnce(ajax);
done();
});
});
Note: I already tried with below object example. it works like charm.
library.jsvar jquery = {
ajax: function () {
console.log("I'm a");
},
getJSON: function () {
this.ajax();
console.log("I'm b");
}
};
exports.jquery = jquery;
var sinon = require('sinon');
var $ = require('./library').jquery;
describe('Tutor Test', function () {
it('getJSON Calling ajax', function (done) {
var ajax = sinon.spy($, 'ajax');
$.getJSON();
ajax.restore();
sinon.assert.calledOnce(ajax);
done();
});
});
I'm getting error like below during mocha test
1) Tutor Test getJSON Calling ajax:
TypeError: Attempted to wrap undefined property ajax as function
at Object.wrapMethod (node_modules/sinon/lib/sinon/util/core.js:113:29)
at Object.spy (node_modules/sinon/lib/sinon/spy.js:41:26)
at Context.<anonymous> (test.js:41:26)
Sinon. So avoid using Sinon for those use cases.Note: Your (
ajax) function does not have param and return value and not bind to the exported object is real challenge forsinon
In such case, If you wanted to make sure whether ajax function is triggered or not. You can use rewire.
Below is the working code.
var rewire = require('rewire');
var lib = rewire('./library');
const assert = require('assert');
describe('Tutor Test', function () {
it('getJSON Calling ajax', function (done) {
lib.__set__('isAjaxCalled', false);
lib.__set__('ajax', function () {
lib.__set__('isAjaxCalled', true);
});
lib.getJSON();
assert.equal(lib.__get__('isAjaxCalled'), true);
done();
});
});
No Change your Actual code, library.js
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With