Testing Library - 简介

@testing-library 软件包系列以用户为中心的方式帮助您测试 UI 组件。

你的测试越接近你的软件使用方式,它们能给你提供的信心就越多。

核心库 DOM Testing Library,是一个轻量级的解决方案,用于通过查询和与DOM节点(无论是使用JSDOM/Jest模拟还是在浏览器中)进行交互来测试网页。它提供的主要实用程序涉及以类似于用户在页面上查找元素的方式查询DOM中的节点。这样,该库有助于确保您的测试使您对应用程序在实际用户使用时的表现充满信心。

核心库已经被封装,为包括 React、Angular 和 Vue 在内的几个框架提供了人性化的 API。还有一个插件可以使用 Cypress 中的 testing-library 查询进行端到端测试,以及一个 React Native 的实现。

DOM Testing Library适用于任何提供 DOM API 的环境,例如 Jest、Mocha + JSDOM 或真正的浏览器。

使用测试库应避免的事项

您可能希望避免以下实现详细信息:
1、组件的内部状态

2、组件的内部方法

3、组件的生命周期方法

4、子组件

指导原则

我们尝试只提供那些鼓励你编写与实际使用方式相似的网页测试的方法和实用工具。

本项目中公共设施的配置基于以下指导原则:

1、如果它与渲染组件相关,那么它应该处理 DOM 节点而不是组件实例,并且它不应该鼓励处理组件实例。

2、它通常对于以用户会使用的方式测试应用程序组件很有用。我们在这里做出了一些权衡,因为我们正在使用计算机和通常是一个模拟的浏览器环境,但总的来说,实用程序应该鼓励以预期的方式使用组件的测试。

3、实用工具和API应该简单且灵活。

4、说到底,我们想要的是一个轻便、简单、易于理解的库。

FAQ

1、我应该使用哪种 get 方法?

答:参照:Which Query Should I Use

2、我可以用这个库编写单元测试吗?

答:当然可以!您可以使用这个库编写单元测试、集成测试和端到端测试。

       在编写测试时,请记住:

       您的测试越接近软件的实际使用方式,它们给您的信心就越多。

3、如果我的应用已本地化,而我无权访问测试中的文本,该怎么办?

这是相当常见的。我们的第一个建议是尝试获取测试中使用的默认文本。这将使一切变得更加容易(而不仅仅是使用此实用程序)。如果这不可能,那么您可能最好坚持使用data-testids(这本身也不错)。

4、我真的不喜欢 data-testids,但其他查询都没有意义。我必须使用 data-testid 吗?

当然不是。不过,人们不喜欢 data-testid 属性的一个常见原因是,他们担心将其发送到生产环境。我建议,你可能需要一些在生产环境中偶尔运行的简单端到端测试,以确保一切正常。在这种情况下,data-testid 属性将非常有用。即使你不在生产环境中运行这些测试,你可能也想在即将发送到生产环境的相同代码上运行一些端到端测试。在这种情况下,data-testid 属性也会在那里很有价值。

话虽如此,如果你真的不想发送 data-testid 属性,那么你可以使用这个简单的 babel 插件来删除它们。

如果你根本不想使用它们,那么你可以简单地使用常规的 DOM 方法和属性来查询容器中的元素。

const firstLiInDiv = container.querySelector('div li')
const allLisInDiv = container.querySelectorAll('div li')
const rootElement = container.firstChild

5、如果我正在迭代要放置 data-testid=“item” 属性的项目列表,该怎么办?如何区分它们?

你可以在选择器中包含:nth-child来让你的选择器只选择你想要的元素。

const thirdLiInUl = container.querySelector('ul > li:nth-child(3)')

或者,你可以使用getAllByRole查询 listitem 角色,并访问有问题的索引:

const items = [
  /* your items */
]
const {container} = render(/* however you render this stuff */)
const thirdItem = getAllByRole(container, 'listitem')[2]

6、我无法访问组件方法或组件实例!

这是有意的。

我们希望您将注意力集中在测试用户观察到的组件的输出和功能上,并避免担心组件的实现细节。

我们相信这会导致更少的脆弱和更有意义的测试代码。

请参阅此测试库的指导原则以获取更多信息。

  • 81
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
testing-library/react是一个用于React应用程序的测试工具库。它提供了一组简单而强大的工具,可以帮助开发者编写可靠和可维护的测试。 testing-library/react的核心理念是站在用户角度来编写测试。与其他测试工具相比,它更关注于组件的行为而不是具体的实现细节。这使得测试更加贴近真实用户使用应用程序的方式。它通过模拟用户与组件的交互,并对应用程序的输出进行断言,以验证组件的正确性。 testing-library/react提供了几个重要的工具函数,例如render、screen和fireEvent。render函数负责渲染组件,并返回一个包含组件实例和DOM节点的对象。screen对象提供了访问和查询DOM节点的方法,例如通过查找文本内容、元素标签等等。fireEvent函数用于模拟用户的交互行为,例如点击、输入等等。 使用testing-library/react编写测试的流程通常是先渲染组件,然后通过screen对象查询和断言组件的输出结果。如果需要模拟用户的交互行为,可以使用fireEvent函数触发相应的事件。通过这种方式,开发者可以编写出简洁、直观且可靠的测试。 总体而言,testing-library/react是一个非常有用的测试工具库,它能够帮助开发者编写高质量的React应用程序测试。它的设计理念使得测试更加贴近真实用户的使用场景,并且提供了简单而强大的工具函数来进行测试。无论是单元测试还是集成测试,testing-library/react都能满足开发者的需求,并提供良好的测试覆盖率和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值