Iuri
Iuri

Reputation: 176

jest.spyOn is not working when called from a side effect call

I have the following scenario:

const doSomething = () => {
    const test = 1;

    doAnotherThing();
    return test + 1;
};

const doAnotherThing = () => {};

module.exports = {
    doSomething,
    doAnotherThing
};

And here is my test:

const MyModule = require('./myModule');

describe('MyModule', () => {
    it('Should be able to spy another call', () => {
        const spy = jest.spyOn(MyModule, 'doAnotherThing');

        MyModule.doSomething();

        expect(spy).toHaveBeenCalledTimes(1);
    });
});

Question, is there a way for the call doAnotherThing() inside the doSomething() be spied by jest in some way, without using solutions like rewire?

Upvotes: 4

Views: 3418

Answers (1)

Iuri
Iuri

Reputation: 176

Found the solution here: https://medium.com/welldone-software/jest-how-to-mock-a-function-call-inside-a-module-21c05c57a39f

Redefined my module to this and now it's working

const doSomething = () => {
    const test = 1;

    MyModule.doAnotherThing();
    return test + 1;
};

const doAnotherThing = () => {};

const MyModule = {
    doSomething: doSomething,
    doAnotherThing: doAnotherThing
};

export default MyModule;

Upvotes: 2

Related Questions