Let's say we want to test that a specific function is called by another function using Sinon.
fancyModule.js
export const fancyFunc = () => {
console.log('fancyFunc')
}
export default const fancyDefault = () => {
console.log('fancyDefault')
fancyFunc()
}
fancyModule.test.js
import sinon from 'sinon'
import fancyDefault, { fancyFunc } from '../fancyModule'
describe('fancyModule', () => {
it('calls fancyFunc', () => {
const spy = sinon.spy(fancyFunc)
fancyDefault()
expect(spy.called).to.be.true
})
})
When I run this test the actual value is always false. Also, the original function fancyFunc()
gets invoked (outputs fancyFunc) instead of being mocked.
You can pass this spy where the original function would otherwise be passed when you need to verify how the function is being used. var spy = sinon. spy(object, "method"); Creates a spy for object.
To stub a dependency (imported module) of a module under test you have to import it explicitly in your test and stub the desired method. For the stubbing to work, the stubbed method cannot be destructured, neither in the module under test nor in the test.
var sinon = require('sinon'); var start_end = require('./start_end'); describe("start_end", function(){ before(function () { cb_spy = sinon. spy(); }); afterEach(function () { cb_spy. reset(); }); it("start_pool()", function(done){ // how to make timer variable < 1, so that if(timer < 1) will meet start_end.
var stub = sinon. The original function can be restored by calling object. method. restore(); (or stub. restore(); ).
You can change the import style, and import your module as an Object like this
import sinon from 'sinon'
import * as myModule from '../fancyModule'
describe('fancyModule', () => {
it('calls fancyFunc', () => {
const spy = sinon.spy(myModule, 'fancyFunc');
myModule.fancyDefault()
expect(spy.called).to.be.true
})
})
You should use https://github.com/speedskater/babel-plugin-rewire/
import sinon from 'sinon'
import fancyDefault, { __RewireAPI__ } from '../fancyModule'
describe('fancyModule', () => {
it('calls fancyFunc', () => {
const spy = sinon.spy()
__RewireAPI__.__Rewire__('fancyFunc', spy)
fancyDefault()
expect(spy.called).to.be.true
})
})
Also, check example: https://github.com/speedskater/babel-plugin-rewire#test-code-2
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