@testing-library/react单元测试getBy queryBy和findBy的区别
关于查询
查询是测试库提供的在页面上查找元素的方法。 有几种类型的查询(“get”、“find”、“query”); 它们之间的区别在于,如果没有找到元素,查询是否会抛出错误,或者它是否会返回一个 Promise 并重试。 根据您选择的页面内容,不同的查询可能或多或少是合适的。 有关如何使用语义查询以最易于访问的方式测试页面的建议,请参阅优先级指南。
选择元素后,可以使用事件 API 或用户事件来触发事件并模拟用户与页面的交互,或者使用 Jest 和 jest-dom 对元素进行断言。
有一些用于查询的测试库帮助器方法。 当元素响应操作出现和消失时,可以使用 waitFor 或 findBy 查询等异步 API 来等待 DOM 中的更改。 仅查找作为特定元素的子元素的元素,可以使用 within。 如有必要,还可以配置一些选项,例如重试超时和默认 testID 属性。
示例
import {render, screen} from '@testing-library/react' // (or /dom, /vue, ...)
test('should show login form', () => {
render(<Login />)
const input = screen.getByLabelText('Username')
// Events and assertions...
})
查询类型
单元素
getBy...:返回查询的匹配节点,如果没有元素匹配或找到多个匹配项,则抛出描述性错误(如果需要多个元素,则使用 getAllBy 代替)。
queryBy...:返回查询的匹配节点,如果没有元素匹配则返回null。 这对于断言不存在的元素很有用。 如果找到多个匹配项,则抛出错误(如果可以,请改用 queryAllBy)。
findBy...:返回一个 Promise,当找到与给定查询匹配的元素时解析该 Promise。 如果未找到任何元素或在默认超时 1000 毫秒后找到多个元素,则承诺将被拒绝。 如果需要查找多个元素,请使用 findAllBy。
多元素
getAllBy...:返回查询的所有匹配节点的数组,如果没有元素匹配则抛出错误。
queryAllBy...:返回一个查询所有匹配节点的数组,如果没有元素匹配则返回一个空数组([])。
findAllBy...:返回一个Promise,当找到与给定查询匹配的任何元素时,该承诺将解析为一个元素数组。 如果在默认超时 1000 毫秒后未找到任何元素,则承诺将被拒绝。
findBy 方法是 getBy* 查询和 waitFor 的组合。 他们接受 waitFor 选项作为最后一个参数(即 await screen.findByText('text', queryOptions, waitForOptions))。
参考文档:https://testing-library.com/docs/queries/about
更新于:2个月前相关文章
- 强大的 .NET Mock 框架 单元测试模拟库Moq使用教程
- react使用echart图文教程
- 国外流行的前端框架有哪些?
- react前端基础面试题和答案
- React路径不变location.search参数改变不触发useEffect
- Angular自定义验证器ValidatorFn单元测试
- 在IIS部署React前端项目
- React Error: Exceeded timeout of 5000 ms for a test. 错误
- React @testing-library UserEvent.paste用法更新到14版本后不生效
- @testing-library userEvent和fireEvent的区别
- React获取url参数的几种方法
- react监听路由变化
- Vue和React怎么选?
- react hooks获取url参数
- react单元测试模拟点击浏览器返回按钮时触发popstate事件
- react基础面试问题
- react获取url参数 忽略参数名大小写
- 如何使用 .NET C# 进行单元测试
- react获取url参数不区分大小写
- 如何在React中使用路由?