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

React快照测试-react-test-渲染器与react- testing -library

基础概念

React 快照测试是一种用于确保 UI 组件渲染输出一致性的测试方法。它通过将组件的渲染输出保存为一个“快照”,然后在后续测试中对比新旧快照,来检测组件是否发生了不期望的变化。

react-test-renderer 是 React 官方提供的一个库,用于渲染 React 组件并生成快照。而 @testing-library/react 是一个更现代、更用户友好的测试库,它提供了更接近用户实际使用方式的测试方法。

相关优势

  1. 一致性检查:快照测试可以确保组件的渲染输出在不同版本之间保持一致,有助于捕获不期望的 UI 变化。
  2. 快速反馈:通过对比快照,测试可以迅速失败并指出变化,从而加快问题定位速度。
  3. 简化测试编写:相比于手动编写复杂的 DOM 断言,快照测试可以简化测试代码的编写。

类型

  • 快照测试:基于组件渲染输出的快照进行对比测试。
  • DOM 测试:直接对组件的 DOM 结构进行断言。
  • 行为测试:模拟用户交互并验证组件的响应行为。

应用场景

  • 当组件的渲染输出较为复杂,且不易手动编写断言时。
  • 在持续集成流程中,用于确保每次代码提交不会引入不期望的 UI 变化。
  • 在重构或更新依赖库时,用于检测潜在的破坏性更改。

常见问题及解决方案

问题:快照测试失败,但实际 UI 没有变化。

  • 原因:可能是由于依赖库的更新导致组件渲染输出发生了微小变化。
  • 解决方案:审查快照测试的失败信息,确定变化是否可接受。如果可接受,可以更新快照;如果不可接受,需要检查组件代码以找出潜在问题。

问题:快照测试难以维护。

  • 原因:随着项目的发展,组件的渲染输出可能会变得复杂且难以预测。
  • 解决方案:考虑使用更细粒度的测试方法,如 @testing-library/react 提供的 screen.getBy* 系列方法,直接对组件的特定部分进行断言。

示例代码

以下是一个使用 react-test-renderer 进行快照测试的简单示例:

代码语言:txt
复制
import React from 'react';
import renderer from 'react-test-renderer';
import MyComponent from './MyComponent';

test('renders correctly', () => {
  const tree = renderer.create(<MyComponent />).toJSON();
  expect(tree).toMatchSnapshot();
});

对于更复杂的场景,建议使用 @testing-library/react 进行测试,以下是一个示例:

代码语言:txt
复制
import { render, screen } from '@testing-library/react';
import MyComponent from './MyComponent';

test('renders correctly', () => {
  render(<MyComponent />);
  const linkElement = screen.getByText(/hello/i);
  expect(linkElement).toBeInTheDocument();
});

更多关于 react-test-renderer@testing-library/react 的信息和示例代码,可以参考它们的官方文档或相关教程。

参考链接

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JestReact Testing Library:前端测试的最佳实践

Jest 和 React Testing Library (RTL) 是前端开发中用于测试 React 应用的首选工具。...Jest 是一个功能丰富的JavaScript测试框架,而React Testing Library 是一种提倡以用户角度编写测试的库,它鼓励测试组件的行为而不是内部实现细节。...安装和配置首先,确保你已经安装了react, react-dom, jest, @testing-library/react, 和 @testing-library/jest-dom。...测试组件的交互性React Testing Library 强调测试组件的行为,而不是它的实现细节。...选择性运行测试使用--findRelatedTests选项只运行更改相关的测试,以加快测试速度:npx jest --findRelatedTests使用快照测试对于不经常更改的组件,使用快照测试可以节省时间

16800
  • 【译】使用Enzyme和React Testing Library测试React Hooks

    原文:https://css-tricks.com/testing-react-hooks-with-enzyme-and-react-testing-library/ 当你开始在应用中使用React...我们将介绍使用Enzyme和React Testing Library编写测试,这两个库都能做到这一点。...使用react-testing-library测试 我们将为此写三个测试: 1、初始待办事项的渲染 2、我们可以加一个新的待办事项 3、我们可以删除一个待办事项 首先,我们安装需要的安装包: npm install...--save-dev @testing-library/jest-dom @testing-library/react 接下来,我们可以导入安装包和文件: import React from "react...无论你是使用Enzyme或是enzymeReact Testing Library其中之一来写测试完全取决于你。不管怎样,试着使用linting,毫无疑问,你会很高兴你这样做了。

    4.1K30

    React源码阅读(一):从目录结构开始

    Reconciler(协调器)—— 负责找出变化的组件传入渲染器 Renderer(渲染器)—— 负责渲染任务,将渲染器传来的组件渲染进页面 对应的架构是怎么体现在文件上的,我们目前并不知道,...: react- 开头的文件夹 react文件夹 scheduler调度器文件夹 shared 发现这里存放着很多公用的变量、函数、类型,那这块晚点看 其他包 那么我们会发现这里有两个显而易见的核心...react&&scheduler,当然react-开头的文件夹也是重点,其中对应架构的文件夹基本如下: Renderer渲染器放在哪?...react-fetch 用于数据请求,这个不用说 react-interactions 用于测试交互相关的内部特性,比如React的事件模型 react-reconciler 上文说过...,reconciler是协调器,这里让我们可以构建自己的Renderer 辅助包 react-is 用于测试组件是否是某类型 react-refresh 热重载的react官方实现;

    85610

    React 设计模式 0x8:测试

    : npm test # React Testing Library React Testing Library 基于 DOM Testing Library 添加了用于处理 React 组件的 API...更多信息,请访问 https://testing-library.com/docs/react-testing-library/intro (opens new window)。...label htmlFor="search">Search:).toJSON(); expect(tree).toMatchSnapshot(); }); 当应用程序中发生更改时,快照测试将捕获更改并将其先前的快照进行比较...# React 测试最佳实践 对每个组件编写测试 为每个组件编写测试,以确保它们能够正确地渲染和响应 使用测试库 使用 Jest 和 React Testing Library测试库,它们提供了专门用于测试...React 组件的工具和函数 编写测试用例 编写完整的测试用例,覆盖组件的所有代码路径,包括正常情况和异常情况 使用快照测试 使用 Jest 中的快照测试功能来验证组件是否按预期呈现 使用模拟数据

    1.8K10

    React 组件测试技巧

    创建/清理 act() 数据获取 mock 模块 事件 计时器 快照测试渲染器 缺少什么?...--- act() {#act} 在编写 UI 测试时,可以将渲染、用户事件或数据获取等任务视为用户界面交互的“单元”。...React 提供了一个名为 act() 的助手,它确保在进行任何断言之前,这些“单元”相关的所有更新都已处理并应用于 DOM: act(() => { // 渲染组件 }); // 进行断言 这有助于使测试运行更接近真实用户在使用应用程序时的体验...--- 快照测试 {#snapshot-testing} 像 Jest 这样的框架还允许你使用 toMatchSnapshot / toMatchInlineSnapshot 保存数据的“快照”。...--- 多渲染器 {#multiple-renderers} 在极少数情况下,你可能正在使用多个渲染器的组件上运行测试

    4.9K00

    干货 | 携程租车React Native单元测试实践

    一、技术选型: Jest + Enzyme + react-hooks-testing-library 1.1 jest Jest是FaceBook出品的前端测试框架,适合用于ReactReact...二、环境配置 直接贴上所需要安装的依赖: "devDependencies": { "@testing-library/react-hooks": "^3.2.1", //React...Jest提供了snapshot快照功能用于UI测试,可以创建组件的渲染快照并将其以前保存的快照进行比较,如果两者不匹配,则测试失败。...单元测试React Native v0.59版本以后,RN也支持了React Hooks的开发,由于Enzyme对于Hooks的测试支持不理想,我们专门引入了react-hooks-testing-library...10.1 安装 npm install --save-dev @testing-library/react-hooks 10.2 useState 测试 // useCityName.js import

    6.1K30

    2022年3月最新Eslint + Prettier + Husky + Stylelint + Jest + CICD 超详细前端单元测试&规范工程化工作流

    3.1.1 初始化安装 项目中使用了ts,需要为Jest额外准备babel和typescript环境包 pnpm i jest -D pnpm i -D babel-jest @babel/core...测试用例 with 「ReactTestingLibrary」 安装依赖包 pnpm i -D @testing-library/jest-dom @testing-library/react 在jest.setup.js...写入全局配置 import '@testing-library/jest-dom'; 写第一个测试用例: // home.test.tsx import Home from "...../pages/index"; import React from 'react' import { render, screen } from '@testing-library/react' it(...同时在此补上官网链接 「jestjs.io/docs/gettin… 」 「testing-library.com/docs/react-… 」 建议有问题还是啃文档吧 再补上一些有用的教程 「juejin.cn

    1.9K10

    前端食堂技术周刊第 34 期:Node.js v18 、Nuxt 3 RC1、Parcel v2.5.0、计算机程序的构造和解释

    JavaScript 测试教程[10] 教程包含 10 个部分,包括单元测试快照测试、集成测试、端到端测试(E2E) 等等。...Jest 基础知识 使用 Enzyme 测试 React 组件 组件 Props 测试、mount 函数渲染、快照测试 Mock 模拟 API 调用、模拟 React 组件交互 使用 react-hooks-testing-library...测试 Hooks 使用 Cypress 进行端到端测试(E2E) 对比 React Testing Library 和 Enzyme 使用 Jest 和 React Testing Library 的...Mock 进阶 Linux 命令行世界的生存指南[11] 这本电子书用讲故事的方式介绍了如何生存在 Linux 命令行的世界,着眼于更宏大的视角,试着向你传授如何命令行界面友好的相处。...: https://wanago.io/2022/04/18/advanced-mocking-jest-react-testing-library/ [11] Linux 命令行世界的生存指南: https

    1.1K20

    是时候说再见了,Enzyme.js

    如今,市面上有两个用于测试 React 组件的库在相互竞争:Enzyme 和 React Testing Library,我想说服你的是不要在你的新代码中继续使用 Enzyme 了。...,Kent C.Dodds 在他的博客上宣布了 React Testing Library 的发布,这彻底改变了在 React 中编写单元测试的方法。...似乎 Facebook——React 的诞生地——已经冻结了他们的 Enzyme 测试并禁止在任何新测试中使用它: 虽然这个问题无关,但我认为值得注意的是,如果你可以使用像 React Testing...我更经常看到的是组件 props 的快照,它完全没有说明测试用例的意图,并且将测试内部实现细节紧密耦合起来。...如果你正在思考该如何拆分你的测试,我鼓励你在 React Testing Library 中编写尽可能多的测试。如果某些东西不能在 RTL 中测试(比如通过拖放在 SVG 中绘制一个矩形!)

    45910

    JavaScript 测试系列实战(三):使用 Mock 模拟模块并处理组件交互

    尝试测试 React Hooks Hooks 是 React 的一个令人兴奋的补充,毫无疑问,它可以帮助我们将逻辑模板分离。这样做使上述逻辑更具可测试性。不幸的是,测试钩子并没有那么简单。...在本文中,我们研究了如何使用 react-hooks-testing-library[2] 处理它。...这就是我们使用 react-hooks-testing-library[4] 的原因,我们将在下一篇教程里讲解如何更加舒适的测试 React Hooks 的方法,敬请期待!...参考资料 [1] simulate: https://enzymejs.github.io/enzyme/docs/api/ShallowWrapper/simulate.html [2] react-hooks-testing-library.../docs/hooks-overview.html [4] react-hooks-testing-library: https://wanago.io/2019/12/09/javascript-design-patterns-facade-react-hooks

    4.8K20

    从零打造组件库

    Dodds 安装 yarn add jest babel-jest @babel/preset-env @babel/preset-react react-test-renderer @testing-library...下次再执行测试用例的时候,如果我们修改了组件的源码,那么会将本次的结果快照和上次的快照进行比对,如果不匹配,则测试不通过,需要我们修改测试用例更新快照。...还有一种是基于 ​DOM​ 的测试,基于 ​@testing-library/react: import React from 'react'; import { fireEvent, render,...screen } from '@testing-library/react'; import renderer from 'react-test-renderer'; import Button from...的完整测试,并且对比了 ​Enzyme​ 和 @testing-library/react​ 的区别,是很好的入门文章 React 单元测试策略及落地:系统的讲述了单元测试的意义及落地方案 组件库打包

    1.7K10

    2020 年你应该知道的 React

    至少,您可以使用 React-test-renderer 在 Jest 测试中渲染 React 组件。这已经足以用 jest 来执行所谓的快照测试了。...快照测试的工作方式如下: 运行测试之后,将创建 React 组件中渲染的 DOM 元素的快照。当您在某个时间点再次运行测试时,将创建另一个快照,用作前一个快照的差异。...最终,您会发现自己在使用 Enzyme 或 React Testing Library (这两个都在 Jest 测试环境中使用)来进行更详细的测试功能集。...建议: Unit/Integration/Snapshot Tests: Jest + React Testing Library E2E Tests: Cypress 2e test: Cypress...: Jest with React Testing Library 实用程序库: JavaScript 国际化: react-i18next React 桌面: Electron 大型应用程序 样板文件

    14.4K40
    领券