У меня есть компонент, который заключен как в Material-UI withStyles
HOC, так и в React memo
HOC.
Я не могу протестировать этот компонент, так как не могу вызвать dive()
:
ShallowWrapper::dive() can only be called on components
Единственный вариант, о котором я сейчас знаю, - это независимо export Demo
и export default withStyles(styles)(Demo)
. Это позволяет мне протестировать компонент, не заключенный в withStyles
. Я бы хотел избежать этого метода.
Если я удалю memo (), я смогу протестировать компонент. Точно так же, если я удалю withStyles (), я также смогу протестировать компонент. Комбинация этих HOC делает мой компонент не тестируемым.
Какие существуют стратегии для эффективного тестирования этого компонента?
demo.js
import React, { memo } from "react";
import MUIIconButton from "@material-ui/core/IconButton";
import { withStyles } from "@material-ui/core/styles";
import Tooltip from "@material-ui/core/Tooltip";
import Typography from "@material-ui/core/Typography";
const styles = () => ({
root: {
backgroundColor: "red"
/* more styles... */
}
});
const Demo = memo(({ label, classes }) => (
<div className={classes.root}>
<Tooltip disableFocusListener title={label}>
<Typography>label</Typography>
</Tooltip>
</div>
));
export default withStyles(styles)(Demo);
demo.test.js
import React from "react";
import Adapter from "enzyme-adapter-react-16";
import { configure, shallow } from "enzyme";
import Demo from "./demo";
import MUIIconButton from "@material-ui/core/IconButton";
import Tooltip from "@material-ui/core/Tooltip";
configure({ adapter: new Adapter() });
describe("Demo", () => {
it("Should have a tooltip with label", () => {
const tooltip = "My tooltip";
const el = shallow(<Demo label={tooltip} />).dive();
expect(el.find(Tooltip).props().title).toEqual(tooltip);
});
});
Полноценная рабочая песочница
createShallow
. Но я бы предпочел использовать отдельный экспорт, как вы это уже делаете. Это более надежный способ. В некоторых случаях, таких как компоненты, подключенные к Redux, это официальное предложение. Так не лучше ли использовать один и тот же подход для разных компонентов? - person skyboyer   schedule 05.03.2019