How to mock specific function in object using Jest?

jestjs, mocking, reactjs, refluxjs, tdd

Solution

I have found jest mock instance function It's here

eg:

import expect from 'expect';

jest.mock('../libs/utils/Master');
import Master from '../libs/utils/Master';

Master.mockImplementation(() => {
  return {
    returnOne: jest.fn().mockReturnValueOnce(1)
  }
})
describe('test Master', function() {
  it('test search', function() {
    let master = new Master();
    expect(master.returnOne()).toEqual(1);
  });
});

Problem

I'm testing a React/Reflux application using Jest. I have the following function in a store: ``` onLoad: function() { console.log("ORIGINAL LOAD"); // http request here } ``` I'm trying to mock it out so that it just does what it needs to do without doing the actual network stuff: ``` beforeEach(function() { // mock out onLoad so instead of making API call the store gets test data PostStore.onLoad = jest.genMockFunction().mockImplementation(function () { var p1 = new Post( "54da7df5119025513400000a", // id "Test Post", // title "Kji6ftLjUqhElgnqOBqMUKxYONpU7nK/cu6jTA==\n", // owner anonId "Test Course 1", // course name "This is a test!", // content 6, // upvotes 2, // downvotes ["Kji6ftLjUqhElgnqOBqMUKxYONpU7nK/cu6jTA==\n"] // voter anonIds ); this.posts = [p1]; console.log("mocked function"); }); // component initialized here }); ``` However, it seems like the mocked function never even gets created. When I run the tests, the console still logs `ORIGINAL LOAD`. What's the correct way to override the object's method so that instead of setting the `posts` array in `PostStore` by doing an ajax call it just sets it with test data?

Original source