如何在 React 中使用 Enzyme 或 React 测试库测试 Material-UI 的响应式 UI(例如隐藏、网格、断点)

thi*_*ign 5 unit-testing reactjs material-ui enzyme react-testing-library

如何在 Material-UI 中测试响应式元素?

例子:

import React from "react";
import Hidden from "@material-ui/core/Hidden";

const HideOnMobile = (props) => {
  return <Hidden xsDown>{props.children}</Hidden>;
};
Run Code Online (Sandbox Code Playgroud)

测试用例:

describe(HideOnMobile, () => {
  describe("when screensize is sm", () => {
    it("shows children", () => {});
  });

  describe("when screensize is xs", () => {
    it("hides children", () => {});
  });
});
Run Code Online (Sandbox Code Playgroud)

thi*_*ign 8

多用户界面v5

不幸的是,v4 解决方案不适用于 v5

多用户界面 v4

如此处所述,您可以使用主题道具来设置 MUI 的大小属性:

import { createMuiTheme, MuiThemeProvider } from "@material-ui/core/styles";

const SizeWrapper = (props) => {
  const theme = createMuiTheme({
    props: { MuiWithWidth: { initialWidth: "sm" } },
  });

  return <MuiThemeProvider theme={theme}>{props.children}</MuiThemeProvider>;
};
Run Code Online (Sandbox Code Playgroud)

例如使用 React 测试库:

describe(HideOnMobile, () => {
  describe("when screensize is sm", () => {
    it("shows children", () => {
      const testMessage = "Test Message";
      render(<HideOnMobile>{testMessage}</HideOnMobile>, { wrapper: SizeWrapper });

      expect(screen.getByText(testMessage)).toBeInTheDocument();
    });
  });
});
Run Code Online (Sandbox Code Playgroud)