【问题标题】:I want to write test case in jest for the function in my react tsx file我想为我的反应 tsx 文件中的函数编写测试用例
【发布时间】:2022-10-13 17:52:23
【问题描述】:

在我的 Header.tsx

功能 :

const mobileMenuToggle: toggleMobileMenu = () => setIsNavOpen((prev) => !prev);

使用它的按钮:

     <button
        data-testid="hamburgerBtn"
        className="HAMBURGER-ICON space-y-2 px-5 "
        onClick={mobileMenuToggle}
      >
        <span className=""></span>
        <span className=""></span>
        <span className=""></span>
      </button>

头文件.test.tsx

test("hamburgerMenuToggle button called", () => {
const mockFunction = jest.fn();
render(
  <button onClick={mockFunction}>
    <span className=""></span>
    <span className=""></span>
    <span className=""></span>
  </button>
);
// expect(screen.getByRole("button")).toBeInTheDocument();
expect(mockFunction).toHaveBeenCalled();
});

我试图为它编写测试用例,但不知道如何从我的 Header.tsx 文件中定位它

【问题讨论】:

    标签: javascript reactjs typescript testing jestjs


    【解决方案1】:

    您应该使用fireEvent 并添加data-testid="hamburgerBtn"

    export interface IHamburgerMenuToggleProps {
      onClick?: () => void;
    }
    const HamburgerMenuToggle = ({ onClick }: IHamburgerMenuToggleProps) => {
      return (
        <button
          data-testid="hamburgerBtn"
          className="HAMBURGER-ICON space-y-2 px-5 "
          onClick={onClick}
        >
          <span className="" />
          <span className="" />
          <span className="" />
        </button>
      );
    };
    export default HamburgerMenuToggle;
    
    //tests
    import {
          fireEvent,
          render
        } from "@testing-library/react";
    import HamburgerMenuToggle from "./hamburgerMenuToggle";
    
    test("hamburgerMenuToggle button called", () => {
      const mockFunction = jest.fn();
      const { getByTestId } = render(
        <button data-testid="hamburgerBtn" onClick={mockFunction}>
          <span className=""></span>
          <span className=""></span>
          <span className=""></span>
        </button>
      );
      const button = getByTestId("hamburgerBtn");
      fireEvent.click(button);
      expect(mockFunction).toHaveBeenCalled();
    });
    
    test("hamburgerMenuToggle button called using component", () => {
      const mockFunction = jest.fn();
      const { getByTestId } = render(
        <HamburgerMenuToggle onClick={mockFunction} />
      );
      const button = getByTestId("hamburgerBtn");
      fireEvent.click(button);
      expect(mockFunction).toHaveBeenCalled();
    });

    【讨论】:

    • 不知道为什么会失败!!你知道可能是什么原因吗
    • 您认为mockFunction 与被测组件有什么联系?
    • @AlishMadhukar 更新并测试它现在通过了
    • @Ahmad Mock 函数和组件没有任何联系,所以基本没用
    • @AlishMadhukar 添加了另一个测试,这个与组件连接
    猜你喜欢
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    相关资源
    最近更新 更多