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?
Almost there, all you need to do is
const onLoad = jest.fn().mockImplementation(function () {
var p1 = new Post();//Add your stuff here
this.posts = [p1];
console.log("mocked function");
});
PostStore.onLoad = onLoad.bind(PostStore); //PostStore is your object.