Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 调用了Jest Mock函数,但Jest toHaveBeenCalledTimes返回0_Reactjs_Jestjs_Mocking_React Testing Library - Fatal编程技术网

Reactjs 调用了Jest Mock函数,但Jest toHaveBeenCalledTimes返回0

Reactjs 调用了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) => {

我正在测试一个函数调用

Header.js

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