【问题标题】:Chakra ui unit test with useMediaQuery使用 useMediaQuery 进行 Chakra ui 单元测试
【发布时间】:2021-05-13 13:04:13
【问题描述】:

我有以下简单的测试:

jest.mock("@chakra-ui/react", () => ({
  useMediaQuery: jest.fn().mockImplementation(() => ({
    isMobile: false,
  })),
  chakra: jest.fn(),
}))

describe("TopUp card", () => {
  test("should render correctly", () => {
    const { getByTestId } = render(<TopUp {...propsPhysicalProduct} />)

    expect(getByTestId(testIds.TOP_UP_CARD)).toBeInTheDocument()
    expect(getByTestId("test-id")).toBeInTheDocument()
  })
})

当我运行它时,我得到以下信息:

我怀疑这种情况正在发生,因为我一直在尝试模拟组件内部使用的“useMediaQuery”来建立条件。

组件:

export const TopUp: React.FC<Props> = (props) => {
  const { item } = props

  if (!item?.variant) return null

  const [isMobile] = useMediaQuery([hookBreakpoints.mobileMax])
  const binIcon = <BinIcon />

  return (
    <CardLayout
      dataTestId={testIds.TOP_UP_CARD}
      cardContent={
        <>
          <Stack display="flex" flexDirection={isMobile ? "column" : "row"}>
...

有没有办法只模拟“useMediaQuery”而不必模拟所有的脉轮?

【问题讨论】:

    标签: javascript reactjs chakra-ui


    【解决方案1】:

    您可以使用jest.requireActual(moduleName)

    jest.mock("@chakra-ui/react", () => {
      // --> Original module
      const originalModule = jest.requireActual("@chakra-ui/react");
    
      return {
        __esModule: true,
        ...originalModule,
        useMediaQuery: jest.fn().mockImplementation(() => ({
             isMobile: false,
        })),
      };
    });
    

    【讨论】:

      猜你喜欢
      • 2020-12-30
      • 2020-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      相关资源
      最近更新 更多