Ricky
Ricky

Reputation: 777

Jest: Testing API Methods from Intercom

I am having trouble understanding what the testing flow would be for testing functions which use functions loaded from a JavaScript library from Intercom.

My method looks like this:

 export const generateButton = (handleOnClick) => {
    case "moo":
        return <button onClick={() => Intercom('show')}>Sign Up</button>
    default: 
        return 'moo'

The error I get when running this is:

ReferenceError: Intercom is not defined

Upvotes: 1

Views: 1403

Answers (2)

Ricky
Ricky

Reputation: 777

So I figured it out, I needed to add a new file and point jest set up on package.json to it like so (the file added is mockObject)

"setupFiles": [
  "./config/jest/setupJest.js",
  "./config/jest/mockObject.js"
],

then in the file itself has this in it

global.Intercom = () => {
   console.log('Intercom called')
}

Upvotes: 3

CWSites
CWSites

Reputation: 1811

If I understand what you're trying to do then create a dummyFunction to replace Intercom in your tests. Something like this...

const Intercom = jest.fn();

describe('button click', () => {
    it('Intercom is called correctly', () => {
        // whatever component contains the button should be mounted
        const wrapper = mount(<YourComponentHere />);

        // you may need to add a class to target the specific button
        wrapper.find('button').simulate('click');

        expect(dummyFunction).toHaveBeenCalledWith('show');
        expect(dummyFunction).toHaveBeenCalledTimes(1);
    });
});

Upvotes: -1

Related Questions