reactjs - react-testing-library 渲染 VS ReactDOM.render
问题描述
我们曾经使用 reactDom.render 进行测试。我们在尝试测试功能组件时开始遇到问题。在这些情况下,测试会在处理所有挂钩之前继续进行。我开始寻找解决方案,我发现 react-testing-library 也实现了渲染功能。它似乎解决了这个问题。+ 在某些情况下使用 act()。
react-testing-library render() 的返回值是带有 html 容器的特殊对象,而不是 React 组件。在这种情况下,我们不能再使用 reactDom 测试工具,因为它们需要组件。
我对所有这些库有点困惑,并且不确定测试我们的应用程序的正确方法是什么。谁能详细说明这两个库之间的区别?什么时候使用行为?(我发现这篇文章建议不要在渲染中使用 act:react-test-renderer's create() vs. @testing-library/react's render())
谢谢!
解决方案
谁能详细说明这两个库之间的区别?
RTL 的render()几乎等同于react-dom/test-utils
act() + ReactDOM.render(),请参见RTL render() 的源代码。
RTLrender()
函数的返回对象包含一些常用的方法和 DOM 元素,例如container,它只是 .htmldiv
下的一个 HTML 元素document.body
。
unmount()函数只是包装ReactDOM.unmountComponentAtNode()
方法,仅此而已。
rerender()函数只是render()
再次调用该函数,没有魔法。
在处理所有钩子之前继续测试
我不确定这是怎么发生的,因为您没有提供太多信息。但是数据获取测试配方介绍了如何使用反应钩子和异步代码测试功能组件。
什么时候使用行为?
act()文档很清楚。
要为断言准备组件,请将渲染它的代码包装起来并在 act() 调用中执行更新。这使您的测试运行更接近 React 在浏览器中的工作方式。
如果使用 RTL,则不需要act
自己使用。render
它是由函数包装的。
什么是测试我们的应用程序的正确方法。
测试 React 组件而不依赖于它们的实现细节。这种方法使重构变得轻而易举,并推动您采用可访问性的最佳实践。有关详细信息,请参阅使用测试库和测试实施详细信息应该避免的内容
推荐阅读
- reactjs - 类型 '{ children?: ReactNode; 上不存在属性 'onClick' }'
- node.js - 如何连接 Heroku Redis TLS 节点?
- java - 将 firebase 数据放入 JTable
- c++ - uint8_t 缓冲区到 cv::Mat 转换导致图像失真
- python - 使用 (Py)Spark 从 Postgres 并行读取和处理
- android - 在自定义文件中引用字符串资源并在键入 @string 之类的内容时选择显示自动完成弹出对话框
- java - 如何填写 Thymeleaf 中的 input type="time" 字段?
- javascript - 如何使用 React 访问内置于 useEffect 挂钩的数组?
- bash - 如何修剪每第n行?
- graphql - 在 nextjs 生产中无法访问 Graphql 服务器