微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 useMediaQuery 进行 Chakra ui 单元测试

如何解决使用 useMediaQuery 进行 Chakra ui 单元测试

我有以下简单的测试:

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()
  })
})

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

enter image description here

enter image description here

我怀疑这是因为我一直在尝试模拟组件内部使用的“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”而不必模拟所有 Chakra?

解决方法

您可以使用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,})),};
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。