如何在 React with Enzyme 或 React 测试库中测试 Material-UI 的响应式 UI(例如隐藏、网格、断点)
How to test Material-UI's Responsive UI (e.g. Hidden, Grid, Breakpoints) in React with Enzyme or 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>;
};
测试用例:
describe(HideOnMobile, () => {
describe("when screensize is sm", () => {
it("shows children", () => {});
});
describe("when screensize is xs", () => {
it("hides children", () => {});
});
});
MUI v5
不幸的是,v4 solution doesn't work for v5。
MUI v4
如here所述,您可以使用主题道具为 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>;
};
例如使用 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();
});
});
});
如何测试 Material-UI 中的响应元素?
示例:
import React from "react";
import Hidden from "@material-ui/core/Hidden";
const HideOnMobile = (props) => {
return <Hidden xsDown>{props.children}</Hidden>;
};
测试用例:
describe(HideOnMobile, () => {
describe("when screensize is sm", () => {
it("shows children", () => {});
});
describe("when screensize is xs", () => {
it("hides children", () => {});
});
});
MUI v5
不幸的是,v4 solution doesn't work for v5。
MUI v4
如here所述,您可以使用主题道具为 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>;
};
例如使用 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();
});
});
});