gpt4 book ai didi

javascript - React Jest 测试按钮 onClick

转载 作者:行者123 更新时间:2023-12-04 13:15:09 25 4
gpt4 key购买 nike

我正在使用 React 开发一个应用程序,而且我是它的测试框架的新手。我正在尝试开发一种测试方法来检查是否单击了 onClick 按钮。我读过我需要一个“ spy ”函数来获取有关它是否被调用的信息。

我的测试方法:

test("Btn1 click", () => {
const wrapper = mount(<Register />);
const spyOn = jest.spyOn(wrapper.instance(), "openWindow")
const element = wrapper.find({id: "btn-how-to-choose-provider"}).first();
element.simulate("click");
expect(spyOn).toHaveBeenCalled();
});

注册.js 我要测试的组件:
export default function Register() {
const classes = useStyles();

function openWindow(url) {
window.open(url);
}

return (
<div>
<NavBar />
<Container component="main" maxWidth="sm">
<Card className={classes.root} elevation={4}>
<CssBaseline />
<div className={classes.paper}>
<Avatar className={classes.avatar}>
<AccountCircleIcon />
</Avatar>
<Typography component="h1" variant="h5">Hi! Welcome to Solid.</Typography>
<div className={classes.form}>

<Button
id="btn-how-to-choose-provider"
fullWidth
color="primary"
className={classes.link}
startIcon={<EmojiPeopleIcon/>}
onClick={(e) => openWindow('https://solid.inrupt.com/how-it-works')}
>How to choose a Provider?</Button>

<Button
id="btn-inrupt-provider"
fullWidth
variant="outlined"
color="primary"
className={classes.submit}
startIcon={<ContactsOutlinedIcon/>}
onClick={(e) => window.open('https://inrupt.net/register')}
>Inrupt</Button>

<Button
id="btn-solid-community-provider"
fullWidth
variant="outlined"
color="primary"
className={classes.submit}
startIcon={<ContactsIcon/>}
onClick={() => window.open('https://solid.community/register')}
>Solid Community</Button>

</div>
</div>
</Card>
</Container>
<Grid
item
xs={12}
sm={12}
md={12}
style={{marginTop: '36rem'}}
>
<Footer />
</Grid>
</div>
);
}

使用此配置,我收到以下错误:
TypeError: Cannot read property 'openWindow' of null

34 | test("Btn1 click", () => {
35 | const wrapper = mount(<Register />);
> 36 | const spyOn = jest.spyOn(wrapper.instance(), "openWindow")
| ^
37 | const element = wrapper.find({id: "btn-how-to-choose-provider"}).first();
38 | element.simulate("click");
39 | expect(spyOn).toHaveBeenCalled();

at ModuleMockerClass.spyOn (node_modules/jest-mock/build/index.js:837:28)
at Object.<anonymous> (src/components/containers/register/Register.test.js:36:24)

我的问题是 : 有没有办法用 Jest 或任何其他测试框架测试按钮的 onClick 功能?

最佳答案

好的,经过更多研究,我发现 React Testing Library提供了一些工具来测试某些按钮的 onClick 事件(至少是我在上面的示例中显示的那些)。这些工具之一是 fireEvent ,这有助于实现我想要的:

test("Click", () => {
const {container} = render(<Register />);

const button = getByTestId(container, 'btn-how-to-choose-provider');
fireEvent.click(button);
});

关于javascript - React Jest 测试按钮 onClick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61259167/

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