首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Jest与React Testing Library:前端测试的最佳实践

Jest 是一个功能丰富的JavaScript测试框架,而React Testing Library 是一种提倡以用户角度编写测试,它鼓励测试组件的行为而不是内部实现细节。...下面是一个简单的组件测试示例:import React from 'react';import { render, fireEvent, screen } from '@testing-library/...const button = screen.getByRole('button');fireEvent.click(button);清理和解构每个测试之后,确保清理掉任何副作用,如添加到DOM中的元素...afterEach钩子可以用于此目的:afterEach(() => { cleanup();});异步测试使用waitFor或async/await处理异步操作,确保组件测试中达到期望状态:it(...以下是一些测试组件交互性的最佳实践:测试用户交互使用fireEvent模拟用户行为,例如点击、输入和选择:const input = screen.getByLabelText('Search');fireEvent.change

14000

React 应用架构实战 0x7:测试

# 单元测试 单元测试应用程序单元不依赖于其他部分的情况下进行独立测试。 对于单元测试,我们将使用 Jest,它是 JavaScript 应用程序最流行的测试框架。...集成测试更有价值,因为它们可以更有全面地测试应用程序,我们会测试不同部分的功能、它们之间的关系以及它们的通信方式。 对于集成测试,我们将使用 Jest 和 React Testing Library。...这是一种很好的方法,可以以用户使用应用程序的方式测试应用程序的功能。 src/testing/test-utils.ts 中,我们可以定义一些测试中可以使用的实用工具。...我们还应该从这里重新导出 React Testing Library 提供的所有实用工具,以便我们测试中需要它们时可以轻松地使用它们。...为了对我们的应用程序进行端到端测试,我们可以使用 Cypress,这是一个非常流行的测试框架,它通过无头浏览器中执行测试来工作。这意味着测试将在真实的浏览器环境中运行。

1.6K80
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    用Jest来给React完成一次妙不可言的~单元测试

    除非合并,否则将覆盖DOM测试中的默认设置。 基本上,这个函数所做的就是使用ReactDOM呈现组件。直接附加到document.body的新创建的div中呈现(或为服务器端呈现提供水合物)。...为此,我们大部分时间使用了来自DOM测试fireEvent,其签名如下: fireEvent(node: HTMLElement, event: Event) 简单地说,这个函数接受一个DOM节点(...注意:这个AAA模式并不特定于测试。事实上,它甚至是任何测试用例的一般结构。我在这里向您展示这个是因为我发现测试如何方便地每个部分中编写测试是一件很有趣的事情。...现在,单击按钮之后,我们等待 waitForElement(() => getByText('1') 来增加计数器。一旦计数器增加到1,我们现在可以移动到条件并检查计数器是否等于1。...现在,对于第二个测试,我们可以单击按钮来获取数据并使用async/await来解析它。

    14.9K33

    Jest + React Testing Library 单测总结

    目前腾讯课堂基于 Tdesign 开发的素材组件的单测,就是使用 Jest + React Testing Library 来完成。...2、Jest 的使用 Jest 的安装这里就不赘述了,如果使用 create-react-app 来创建项目,Jest 和 React Testing Library(RTL) 都已经默认安装了。...组件单元测试 使用 Jest 测试 JavaScript (Mock 篇) 3、React Testing Library testing library 是一个测试 React 组件的测试,它的核心理念就是...3.1 render & debug 测试用例中渲染内容,可以使用 RTL 中的 render,render 函数可以为我们测试用例中渲染 React 组件。...();        // await 一个新的元素被找到,并且最终确实被找到当 promise resolves 并且组件重新渲染之后

    4.6K20

    使用 React Testing Library 的 15 个常见错误

    以前的我(Kent)并不是很喜欢那个时候的测试环境,为此写了一个 React Testing Library。...DOM Testing Library v6.11.0 引入的 (就就是说,你可以 @testing-library/react@>=9 这些版本中使用它)。...你应该按这个页面中的顺序来使用 Query API。如果你的目标和我们的一样,都想通过测试来确保用户使用时应用能够正常工作的话,那你就要尽量用更接近用户的使用方式来查询 DOM。...建议:waitFor 的 callback 里只放一个断言 waitFor 中使用副作用 重要程度:高 // ❌ await waitFor(() => { fireEvent.keyDown(...建议:如果你想断言某个东西是否存在,那么就做显式的断言操作 总结 作为测试工具系列的维护者,我们尽最大努力使 API 能够引导人们尽可能有效地使用,一些不足之处,我们会尝试正确地记录下来,即使这会非常地困难

    1.3K20

    前端测试体系建设与最佳实践总结

    因为我们的项目使用的是 React 技术栈,这里主要介绍 React 项目的技术选型和使用。 单元测试 ? Mocha 是生态最好,使用最广泛的单测框架,但是他需要较多的配置来实现它的高扩展性。...Augular 的默认测试框架就是 Karma + Jasmine,而 React 的默认测试框架是 Jest. Jest 被各种 React 应用推荐和使用。...React Testing Library 出的比较晚,但倾向于支持 React 的新功能,这对我来说测试 Hooks 时是一个巨大的好处。...原有逻辑增加新功能时,通过运行之前的测试,能够大大提高迭代的质量和稳定性。 这篇文章主要总结了笔者 React 项目中书写测试的经验与沉淀,而对于 Vue 的项目,暂时还没有深入研究。...但是 Vue 有个特点,基本上重要的比如 Vue-Router, Vuex 都是官方维护,同样的 Vue Test Utils 也是 Vue.js 官方的单元测试工具

    5.3K30

    如何测试 React Hooks ?

    一旦你把类组件 Accordion 重构为函数式组件,那些测试就会挂掉。所以为了确保我们的代码能在不推倒重来的情况下准备好 hooks 的重构,我们能做些什么呢?...所以之前,是我们渲染之后同步的设置 localStorage 的值;而现在这个动作被安排到渲染之后的某个时候。为何如此呢?...使用 react-testing-library wait 工具并把测试设置为 async。...总不能为了新的 useCounter 更新整个代码吧!正在使用的 render prop 组件可能被普遍引用,这样的重写是行不通的。...将我关于避免实现细节的忠告用在你的测试中,让在当今的类组件上工作良好的类,之后重构为 hooks 时照样能发挥作用。祝你好运!

    1.5K10

    从零打造组件

    那么,做一套组件,容易吗? 答案肯定是不容易,当你去做这件事的时候,会发现它其实是一套体系。从开发、编译、测试,到最后发布,每一个流程都需要大量的知识积累。...:基于 ​jest​ 的 ​React​ 组件测试方案及完整报告 一键发版:整合多条命令,流水线控制 npm publish 全部过程 线上部署:基于 ​now​ 快速部署线上文档站点 如有错误欢迎评论区进行交流...还有一种是基于 ​DOM​ 的测试,基于 ​@testing-library/react: import React from 'react'; import { fireEvent, render,...的完整测试,并且对比了 ​Enzyme​ 和 @testing-library/react​ 的区别,是很好的入门文章 React 单元测试策略及落地:系统的讲述了单元测试的意义及落地方案 组件打包...结尾 本文是我搭建组件过程中的学习总结,在过程中学习到了很多知识,并且搭建了清晰的知识体系,希望能够对你有所帮助,欢迎评论区交流~ 参考文档 Tree-Shaking性能优化实践 - 原理篇 彻底搞懂

    1.6K10

    React 组件如何写单元测试

    当你写完一个 React 组件,如何保证它的功能是正常的呢? 浏览器里渲染出来,手动测试一遍就好了啊。...单元测试可以测试函数、类的方法等细粒度的代码单元,保证功能正常。 有了单元测试之后,后续代码改动只需要跑一遍单元测试就知道功能是否正常。...组件和 hooks 可以使用 @testing-library/react 这个包,然后测试用例使用 jest 来组织。...就是把触发更新的代码放到 act 里面去执行,之后再断言。 文档里的例子是这样的: 其实刚才我们的 fireEvent 就应该放到 act 里包一层。...主要是用 @testing-library/react 这个,它有一些 api: render:渲染组件,返回 container 容器 dom 和其他的查询 api fireEvent:触发某个元素的某个事件

    51420

    测试使用内存数据

    初始化数据和导入数据一文中,我们探索了Spring Boot项目中如何创建数据的表结构,以及如何往数据中填充初始数据。...程序开发过程中常常会在环境配置上浪费很多时间,例如在一个存在数据组件的应用程序中,测试用例运行之前必须保证数据中的表结构正确,并且已经填入初始数据。...对于良好的测试用例,还需要保证数据执行用例前后状态不改变。 之前应用的基础上,schema.sql文件中包含创建数据表结构的SQL语句、data.sql文件中包含填充初始数据的SQL语句。...BookPubApplicationTest @Test public void contextLoads() { assertEquals(3, bookRepository.count()); } 至此我们还都是使用外部数据...——MySQL,现在尝试使用内存数据H2,因此src/test/resources目录下添加application.properties文件,内容是: spring.datasource.url=\

    1.5K20

    前端接入单元测试(Node+React)

    node测试框架因为egg内置Mocha,因此不额外引入jest。 Jest 被各种 React 应用推荐和使用。...react组件,最开始使用Enzyme,后面从React脚手架创建的项目自带React Testing Library(RTL),官方推荐使用RTLimport React from "react";import...{ render, fireEvent } from "@testing-library/react";import Todo from "../.....目的在于,测试经过单元测试后的各个模块组合在一起是否能正常工作。会对组合之后的代码整体暴露在外接口进行测试,查看组合后的代码工作是否符合预期。...history 优点: 可以作为任务定时去执行,可以和蓝盾配合使用 缺点:需要添加项目和任务,执行时间长,node没有对应的mocha,需要额外安装jestTestOne DWT 前端自动化测试 http

    3.3K30

    前端反卷计划-组件-04-Button组件开发

    今天开始分享如何从0搭建UI组件。这也是前端反卷计划中的一项。接下来的日子,我会持续分享前端反卷计划中的每个知识点。以下是前端反卷计划的内容:目前这些内容持续更新到了我的 学习文档 中。...mixin编写上面的函数新建 src/styles/_mixin.scss,编写如下代码:这里解释一下:相当于button-size中传了4个参数,使用这4个参数来定义样式属性,使用的时候即可传入对应的样式变量即可...npm install --save-dev @types/jest4.5.1 测试1:展示正确的默认按钮import React from 'react'import { render, fireEvent...expect(defaultProps.onClick).toHaveBeenCalled() })})终端输入:npm run test 执行下测试用例,看是否通过。可以看到测试用例通过了。...4.5.6 完整测试用例代码import React from 'react'import { render, fireEvent } from '@testing-library/react'import

    30210

    Java 多线程模式 —— Guarded Suspension 模式

    有点类似于 Java 的 wait() 和 notify() 方法。 Guarded Suspension 模式通过让线程的等待,来保证受保护对象的安全。...场景一 工业自动化场景下,某个自动化流水线上使用工业相机通过图像算法识别上料台是否有物品,当算法识别到上料台有物品时,机械臂才会去抓取物品,否则机械臂一直处于等待状态。...当然,用 Java 的 wait() 和 notify()/notifyAll() 方法也是可以的。...p.test(obj)) { done.await(TIMEOUT, TimeUnit.SECONDS); } } catch (...总结 笔者正好使用该模式,将某个串口调用的第三方 (https://github.com/NeuronRobotics/nrjavaserial) 从原先只支持异步调用,改成了也可以支持同步调用,增加了超时的机制

    49140

    单元测试

    @testing-library/react 是一个用于测试 React 组件的 JavaScript 测试工具,它提供了一组简单且易于使用的 API,可以帮助你编写可读性高、可维护性强的测试代码。...这样可以确保每个测试用例都在相同的初始状态下运行,并且没有残留的状态或影响。 每个测试用例之后使用 afterEach 函数或 afterAll 函数来清理测试环境。...如果测试用例依赖于某些外部资源(例如网络请求),请确保测试之前和之后进行适当的管理和清理,以确保资源的正确使用和释放。...act 的使用场景如下: 当你测试中进行与 React 组件的交互(例如模拟用户点击、输入等)时,可以使用 act 来确保组件更新后进行正确的断言。... waitFor 中使用副作用 // ❌ await waitFor(() => { fireEvent.keyDown(input, {key: 'ArrowDown'}) expect(screen.getAllByRole

    23610

    如何测试驱动开发 React 组件?

    TDD 的过程 编写测试用例 运行测试测试失败 修改代码 测试通过 重构/优化代码 新增功能,重复上述步骤 image.png 某种程度上,它可能在初学者看来是单调乏味或者不切实际的,但是严格按照这个步骤来做这件事...测试组件 首先使用 create-react-app 初始化一个 react 项目。目前 cra 已经内置了 @testing-library/react 作为测试框架。...: import React from 'react' import { render, fireEvent } from '@testing-library/react' import Confirmation...TDD 一步一步地引导完成组件特性的规范,确保我们组件重构或者他人修改代码的时候能够遵循现有开发的逻辑。这这是 TDD 的优势。...例如: 如何出测试 react hooks ? 如何测试 react 路由? 如何测试接口? 希望这篇文章对大家有所帮助,也可以参考我往期的文章或者评论区交流你的想法和心得,欢迎一起探索前端。

    2.2K10

    21个让React 开发更高效更有趣的工具

    React-Proto React-Proto 是一个面向开发人员和设计人员的原型工具。这是一个桌面软件,所以使用之前你必须下载并安装这个软件。...Guppy 启动后的的样子 7. react-testing-library react-testing-library 是一个很棒的测试,编写单元测试时,它会让你感觉很好。...这个包提供了React DOM测试实用程序,鼓励良好的测试实践。 此解决方案旨在解决测试实现细节的问题,而不是测试React组件的输入/输出,就像用户会看到它们一样。...以下是使用进行测试的示例代码: // Hoist helper functions (but not vars) to reuse between test cases const renderComponent...CodeSandbox 最初只早期阶段支持React,但它们现在已经扩展到Vue和Angular等的其他入门模板。

    2.4K30
    领券