Reactjs 调用了Jest Mock函数,但Jest toHaveBeenCalledTimes返回0
我正在测试一个函数调用 Header.jsReactjs 调用了Jest Mock函数,但Jest toHaveBeenCalledTimes返回0,reactjs,jestjs,mocking,react-testing-library,Reactjs,Jestjs,Mocking,React Testing Library,我正在测试一个函数调用 Header.js function Header({ userLogout, ...props }) { const [openDialog, setOpenDialog] = React.useState(false); const handleOpenDialog = () => { setOpenDialog(true); }; const handleDialogClose = (event, shouldLogout) => {
function Header({ userLogout, ...props }) {
const [openDialog, setOpenDialog] = React.useState(false);
const handleOpenDialog = () => {
setOpenDialog(true);
};
const handleDialogClose = (event, shouldLogout) => {
event.preventDefault();
if (shouldLogout) {
userLogout(true);
}
setOpenDialog(false);
};
return (
<>
<div onClick={handleOpenDialog}>Logout</div>
<Dialog
open={openDialog}
onClose={handleDialogClose}
aria-labelledby="logout-dialog"
>
<DialogContent>
<DialogContentText data-testid="message">
You are about to be logged out.
<br />
Are you sure?
</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={handleDialogClose} color="primary" name="cancel">
Cancel
</Button>
<Button
onClick={(e) => handleDialogClose(e, true)}
color="primary"
name="logout"
>
Log out
</Button>
</DialogActions>
</Dialog>
</>
)
}
Header.propTypes = {
userLogout: PropTypes.func.isRequired,
};
const mapDispatchToProps = {
userLogout,
};
export default withRouter(connect(null, mapDispatchToProps)(Header));
当我调试单元测试时,它确实转到userLogout函数,但测试仍然失败
首先,您是否获得了注销按钮实例?是的,我获得了注销按钮,单击事件被触发。在那一步之前没有错误。测试仅在expect代码上失败。当我调试测试时,它会转到userLogout函数调用。
import React from "react";
import Header from "./Header";
import "./setupTests";
import * as utils from "./Utils/utils";
import { rtlRender } from "./setupTests";
import { screen, fireEvent, waitFor } from "@testing-library/react";
const user = {
token: "test token",
authExpireTime: date.setHours(date.getHours() + 1),
name: "abc",
};
const initialState = {
userLogout: jest.fn(),
history: {},
match: {},
};
function render() {
return rtlRender(<Header />, {
initialState: initialState,
});
}
describe("test logout dialog", () => {
beforeEach(() => {
jest.spyOn(utils, "getLocalStorage").mockReturnValue(user);
render();
const logoutBtn = screen.getByText("Logout");
fireEvent.click(logoutBtn);
});
test("should call userLogout function when user clicks on Logout", async () => {
const logoutBtn = screen.getByRole("button", { name: /LOG OUT/i });
fireEvent.click(logoutBtn, { shouldLogout: true });
await waitFor(() => {
expect(initialState.userLogout).toHaveBeenCalledTimes(1);
});
});
});
expect(jest.fn()).toHaveBeenCalledTimes(expected)
Expected number of calls: 1
Received number of calls: 0