Reputation: 307
Writing test for a functional component that uses a service. Trying to test scenario when service returns error. But getting error "mockRejectedValueOnce is not a function". Can someone please help.
Test scenarios where by data is received from service passes, so not missing a dependency.
import {render, cleanup, wait} from '@testing-library/react';
import '@testing-library/jest-dom/extend-expect'
import ChatList from './../components/ChatList';
import getMessages from "./../service";
jest.mock("./../service");
describe("ChatList renders chat",()=>{
it("renders error when error occurs during data fetch",()=>{
getMessages.mockRejectedValueOnce('an error');
const {getByTestId, queryByTestId} = render(<ChatList/>);
expect(getMessages).toHaveBeenCalledTimes(1);
wait(() => {
expect(queryByTestId("messages-list")).toBeNull();
expect(getByTestId("error-wrapper")).toBeInTheDocument();
});
});
});
message service looks like below:
export default function getMessages() {
return new Promise(function(resolve, reject) {
//array of messgaes
});
};
Actual results:
TypeError: _service2.default.mockRejectedValueOnce is not a function
at Object.it (src/_tests_/ChatList.test.js:48:80)
at process._tickCallback (internal/process/next_tick.js:68:7)
Upvotes: 5
Views: 7944
Reputation: 307
I resolved above by changing above code mockRejectedValueOnce to mockImplementation:
getMessages.mockImplementation(() => Promise.reject("error"));
Upvotes: 3