javascript - 如何在使用 jest 和 react-testing-library 进行测试时设置组件的本地状态?

标签 javascript reactjs unit-testing jestjs react-testing-library

使用 AirBnB 的 enzyme ,我们可以设置组件的状态:

const loginComponent = shallow(<Login />);
loginComponent.setState({ error: true });

我想使用 react-testing-library 做同样的事情。

谢谢!

最佳答案

你不能用 react-testing-library 做到这一点。这是因为 RTL 希望您像用户一样测试您的组件。

这是什么意思?在现实生活中,您的组件会在发生某些事情后改变状态。可能是用户输入了错误的数据或 API 返回了错误代码。

与其直接更改状态,不如尝试重现更改状态的一组操作。

这种方法比 Enzyme 提供的方法更难实现,但您的测试会更加健壮。那是因为您要测试整个流程,而不是只关注发生特定状态时呈现的内容。

最重要的是,您重构代码并更改状态的工作方式。只要用户与您的应用程序交互的方式相同,RTL 测试就不会在意。但是, enzyme 测试会失败,因为它不再知道如何与组件的内部交互。

关于javascript - 如何在使用 jest 和 react-testing-library 进行测试时设置组件的本地状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54104547/

相关文章:

javascript - 有向图是否仅适用于包含 "source"和 "target"值的文件?

javascript - 如何缩小纯 CSS 组件以适应父组件?

javascript - 如何在不重新渲染父级的情况下更改另一个子级的子级状态

reactjs - React Hooks 如何使用Callback "freezes"闭包?

python - 在 Django 应用程序测试中使用 mock 来覆盖函数

javascript - 如何使用 sinon.js 模拟事件处理程序方法?

javascript - 如何将 Javascript var 传递到 href 标签中?

javascript - Jquery JSON 响应处理

mysql - 如何以 React 形式管理来自 Express 的 mysql 查询错误?

javascript - 访问占位符文本以使用 jest 进行验证