gpt4 book ai didi

reactjs - React 测试库 : Test attribute/prop

转载 作者:搜寻专家 更新时间:2023-10-30 20:42:49 24 4
gpt4 key购买 nike

我正在使用 TypeScript 编写 React 应用程序。我将 material-ui 用于我的组件,将 react-testing-library 用于我的单元测试。

我正在为 material-ui 的 Grid 组件编写一个包装器,以便我始终有一个项目。

import Grid from "@material-ui/core/Grid";
import withStyles, { WithStyles } from "@material-ui/core/styles/withStyles";
import React, { PureComponent } from "react";
import styles from "./styles";

export interface OwnProps {
className?: string;
}

export interface Props extends WithStyles<typeof styles>, OwnProps {}

export interface DefaultProps {
className: string;
}

export class GridItem extends PureComponent<Props & DefaultProps> {
static defaultProps: DefaultProps = {
className: ""
};

render() {
const { classes, children, className, ...rest } = this.props;
return (
<Grid
data-testid="grid-item"
item={true}
{...rest}
className={classes.grid + " " + className}
>
{children}
</Grid>
);
}
}

export default withStyles(styles)(GridItem);

我想编写一个单元测试来检查 item={true}。我尝试像这样使用助手库 jest-dom 的 toHaveAttribute:

import "jest-dom/extend-expect";
import React from "react";
import { cleanup, render } from "react-testing-library";
import GridItem, { OwnProps } from "./GridItem";
afterEach(cleanup);

const createTestProps = (props?: object): OwnProps => ({
...props
});

describe("Parallax", () => {
const props = createTestProps();
const { getByTestId } = render(<GridItem {...props} />);
describe("rendering", () => {
test("it renders the image", () => {
expect(getByTestId("grid-item")).toHaveAttribute("item", "true");
});
});
});

但是这个测试失败了:

● GridItem › rendering › it renders the image

expect(element).toHaveAttribute("item", "true") // element.getAttribute("item") === "true"

Expected the element to have attribute:
item="true"
Received:
null

14 | describe("rendering", () => {
15 | test("it renders the image", () => {
> 16 | expect(getByTestId("grid-item")).toHaveAttribute("item", "true");
| ^
17 | });
18 | });
19 | });

at Object.toHaveAttribute (src/components/Grid/GridItem/GridItem.test.tsx:16:40)

Test Suites: 1 failed, 3 passed, 4 total
Tests: 1 failed, 3 passed, 4 total
Snapshots: 0 total
Time: 1.762s, estimated 2s
Ran all test suites related to changed files.

如何测试元素是否具有特定属性?

最佳答案

jest-dom toHaveAttribute 断言断言 item attribute 而测试试图测试 item prop.

item prop 不一定会导致 item 属性,并且由于它是非标准属性,所以很可能不会。

react-testing-library 传播功能测试并断言生成的 DOM,这需要了解码件的工作方式。可以看出here , item 属性导致向网格元素添加一个类。

除测试单元外的所有单元都应在单元测试中进行模拟,例如:

...
import GridItem, { OwnProps } from "./GridItem";

jest.mock("@material-ui/core/Grid", () => ({
default: props => <div data-testid="grid-item" className={props.item && item}/>
}));

那么它可以断言为:

  expect(getByTestId("grid-item")).toHaveClass("item");

关于reactjs - React 测试库 : Test attribute/prop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53132820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com