I'm completely new to writing test cases.I'm trying to write test case using jest,enzyme/react-testing library.I'm unable to test this component,tets are failing .If anyone can help me to write the test for the below code .Thank you in advance... I have attached the test case as well.If found of mistakes do help me out with it. test case with jest,enzyme or react-library anything is fine .I'm still in learning phase.
header.js
import React, { useState } from "react";
import { useDispatch } from "react-redux";
import { Link } from "react-router-dom";
import {
fetchAsyncMovies,
fetchAsyncShows,
} from "../../features/movies/movieSlice";
import user from "../../images/user.png";
import "./Header.scss";
const Header = () => {
const [term, setTerm] = useState("");
const dispatch = useDispatch();
const submitHandler = (e) => {
e.preventDefault();
if(term==="")return alert("Please enter the search term")
dispatch(fetchAsyncMovies(term));
dispatch(fetchAsyncShows(term));
setTerm("");
};
return (
<div className="header">
<div className="logo">
<Link to="/">Movie App</Link>
</div>
<div className="search-bar">
<form onSubmit={submitHandler}>
<input
type="text"
value={term}
placeholder="Search Movies or Shows"
onChange={(e) => setTerm(e.target.value)}
/>
<button type="submit">
<i className="fa fa-search"></i>
</button>
</form>
</div>
<div className="user-image">
<img src={user} alt="user" />
</div>
</div>
);
};
export default Header;
Test case.
import React from "react";
import Header from "./Header";
import { shallow } from "enzyme";
import Enzyme from "enzyme";
import Adapter from "@wojtekmaj/enzyme-adapter-react-17";
import * as reactRedux from "react-redux";
Enzyme.configure({ adapter: new Adapter() });
jest.mock("react-redux", () => ({
...jest.requireActual("react-redux"),
useDispatch: jest.fn(),
}));
describe("Header", () => {
//mocking useDispatch hook
beforeEach(() => {
useDispatchMock.mockImplementation(() => () => {});
});
afterEach(() => {
useDispatchMock.mockClear();
});
const useDispatchMock = reactRedux.useDispatch;
test("submit handler gets invoked", () => {
const jsdomAlert = window.alert; // remember the jsdom alert
window.alert = () => {};
const submitHandler = jest
.fn()
.mockImplementation((cb) => () => cb({ test: "test" }));
const wrapper = shallow(
<Header form="test" submitHandler={submitHandler} />
);
const event = { preventDefault: () => {} };
jest.spyOn(event, "preventDefault");
wrapper.find("form").simulate("submit", event);
expect(submitHandler).toHaveBeenCalledTimes(0);
expect(event.preventDefault).toBeCalled();
window.alert = jsdomAlert;
});
});