首页
学习
活动
专区
圈层
工具
发布

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

在之前的两篇教程中,我们学会了如何去测试最简单的 React 组件。在实际开发中,我们的组件经常需要从外部 API 获取数据,并且组件的交互逻辑也往往更复杂。...在这篇教程中,我们将学习如何测试更复杂的组件,包括用 Mock 去编写涉及外部 API 的测试,以及通过 Enzyme 来轻松模拟组件交互 初次尝试 Jest Mock 我们的应用程序通常需要从外部的...打开 TodoList 的测试文件,首先在最前面通过 jest.mock 配置 axios 模块的 Mock(确保要在 import TodoList 之前),在 Mock 之后,无论在测试还是组件中使用的都将是...从测试返回 promise 是确保 Jest 等待其异步方法执行结束的一种方法。 小结 在本文中,我们介绍了 mock 模块,并将其用于伪造API调用。...在本文中,我们研究了如何使用 react-hooks-testing-library[2] 处理它。

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

    Jest单元测试之旅—实践总结

    这里针对自身场景选择合适的工具既可以,因为我们业务主要使用React,而Jest和React Testing Library则是我们最佳的选择。下面也主要围绕该工具进行介绍。...第二:我们测试某个方法时,可能当前方法会夹杂对其他外部方法的调用,如果外部方法并不是一个纯函数,此时我们不应该再对外部方法再进行测试,而是通过Mock方式去模拟它。...这意味着模块模拟不会包装原始模块,它会完全替换require系统中的原始模块。因此,mockRestore可以在模拟模块中的模拟函数上定义,但是调用它不会恢复原始实现。...这里分别使用了jest.spyOn和jest.Mock两个方式对同一个方法进行3种不同编写方式的测试,在实际情况中我们应该选择合适的方法。...jest.mock模拟部分函数,这里使用了jest.requireActual,该方法主要是绕过模拟模块导出真实模块,然后通过jest.mock的工厂函数重新去定义该模拟模块的内容,这种方式就可以指定导出的模块具体哪些方法需要被模拟

    11.3K20

    Unit Testing

    #配置单元测试 #安装 Jest 我们使用 yarn 来安装 Jest 包 yarn add -D jest 在 package.json 文件中加入测试命令 { "scripts": {...运行 Jest 测试代码时出现 Cannot use import statement outside a module 不能在其他模块使用 import 语句 出现这个问题的主要原因在于 Webpack...但是 Jest 并不认识别名 这个问题大概都会遇到吧,几乎在项目中都会有 Webpack 来做别名处理,解决那种点点引用方式,例如: // 点点表示法 import SomeComponent from...文件夹下的文件和代码 无法识别 css scss 等样式文件 在我们组件当中大部分都会有 css 或者 scss 等文件,但是 Jest 并无法处理这类文件,此时需要将此类样式文件都 Mock 掉 {...在表格中 ✅ 的,建议是在 100% 的覆盖率 #参考 Jest React 测试技巧 React 单元测试策略及落地 单元测试-维基百科

    1.6K20

    JavaScript 测试系列实战(一):使用 Jest 和 Enzyme 测试 React 组件

    本篇教程是 JavaScript 测试系列实战 的第一篇教程,首先介绍了测试的类型,然后主要通过一个 React 项目教会你如何使用 Jest 编写第一个测试,然后使用 Enzyme 对 React 组件进行浅层渲染...,它接受一个表达式,然后后面可以调用 Matcher 来测试该表达式是否符合条件,例如这里我们就使用了最常用的 toBe Matcher;Jest 还提供了大量的 Matcher,可以帮助我们写出更简洁可读的断言语句...Jest 测试文件中使用它。...配置 jest-enzyme 你应该还记得,在刚才的测试代码中,我们还是使用了 Jest 自带的 Matcher(toEqual)。...import { configure } from 'enzyme'; import Adapter from 'enzyme-adapter-react-16'; import 'jest-enzyme

    3.7K10

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

    node测试框架因为egg内置Mocha,因此不额外引入jest。 Jest 被各种 React 应用推荐和使用。...Create React App 新建的项目就会默认配置 Jest,我们基本不用做太多改造,就可以直接使用。...组件,最开始使用Enzyme,后面从React脚手架创建的项目自带React Testing Library(RTL),官方推荐使用RTLimport React from "react";import...{ render, fireEvent } from "@testing-library/react";import Todo from "../.....extend, helper等模块编写单元测试,特别是controller重要的路由需要做单元测试;控制台和其他React项目可以利用jest工具,针对方法、组件、模块去做单元测试,特别是组件,可以利用快照功能避免多次修改测试用例

    3.9K30

    写代码无BUG,网易云前端单元测试方案总结

    Karma 本质上就是在本地启动一个web服务器,然后再启动一个外部浏览器加载一个引导脚本,这个脚本将我们所有的源文件和测试文件加载到浏览器中,最终就会在浏览器端执行我们的测试用例代码。..."] } 这里我们测试一个React 程序代码如下 // js/index.js import React from 'react'; import ReactDOM from 'react-dom'...Jest 和 Jasmine 具有非常相似的 API ,所以在 Jasmine 中用到的工具在 Jest 中依然可以很自然地使用。..."] } Jest 在真实浏览器环境下测试 目前 Jest 不支持直接在真实浏览器中进行测试,其默认的启动器只提供了一个 JSDOM 环境,在浏览器中进行单元测试目前只有 Karma 方案能做到,所以也可以使用...使用 Jest + Enzyme 对 React 进行单元测试 ?

    10.7K20

    React 设计模式 0x8:测试

    安装依赖: npm install --save-dev react-test-renderer 通过简单小例子来演示: import renderer from "react-test-renderer...# 使用 Jest 进行集成测试 在大多数 React 应用程序中,通常需要与外部 API 集成以在应用程序中发布和获取数据。 可以使用 Jest 来测试 API 行为,以查看预期和意外结果。...Jest 模拟函数 使用 模拟函数 来侦测(查看)我们的函数被调用的情况,或者使用它来测试单个函数或整个模块。...在 Jest 中有以下三种类型的模拟函数: Jest.fn(用于模拟单个函数) Jest.mock(用于模拟整个模块) Jest.spyOn(用于查看函数的调用情况) 更多信息请访问 https://jestjs.io...使用模拟数据来测试组件,以确保它们在不同的数据情况下都能正常工作 使用模拟函数 使用模拟函数来模拟组件的依赖项和外部接口,以便更好地控制测试环境 集成测试 编写集成测试来测试应用程序的整个流程

    2.4K10

    React + Redux Testing Library 单元测试

    在同一个文件夹中创建一个 math.test.js 文件,在这里我们将使用 Jest 来测试 math.js 中定义的函数: image.png 然后运行 yarn test (添加 NPM Script...: Mock 用于替代整个模块 import SoundPlayer from '....代码模块的易测性 保持单元测试独立性的同时,也是在促使你去思考什么样的模块才是符合「职责单一原则」的。 单元测试站在使用者的角度来使用该模块,而代码的易测性也就代表着代码的可维护性。...从上文的一些例子当中,我们也可以看到,不管是 Fake/Stub/Mock/Spy 最最重要的一个原则就是「简单」,因为我们是在写测试代码,而所依赖的模块就应该以最简单的形态展现出来,绝不要给 jest.fn...从技术上讲,你可以在真实的浏览器中运行,但由于在不同平台上启动真实浏览器的复杂性,更建议使用 JSDOM 在虚拟浏览器环境中运行 Node 中的测试。

    2.7K10

    实例入门 Vue.js 单元测试

    本文作为《对 React 组件进行单元测试》一文的姊妹篇,将照猫画虎式的尝试面对初学和向中级进阶的开发者,对单元测试在 Vue.js 技术栈 中的应用做出入门介绍。 I....简单来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。...实际使用中,适当的在 package.json 的 jest 字段或独立的 jest.config.js 里自定义配置一下,会得到更适合我们的测试场景。...虽然 Jest 本身也有一些实现 spy 等的手段,但 sinon 使用起来更加方便。...2.3 Vue Test Utils Vue Test Utils 是 Vue.js 官方的单元测试实用工具库;该工具库使用起来和用以测试 React 组件的 Enzyme 工具库非常相似 它模拟了一部分类似

    3.3K20

    那些年错过的React组件单元测试(上)

    技术方案 针对项目本身使用的是React + Dva + Antd的技术栈,单元测试我们用的是Jest + Enzyme结合的方式。...Jest 关于Jest,我们参考一下其Jest 官网[1],它是Facebook开源的一个前端测试框架,主要用于React和React Native的单元测试,已被集成在create-react-app...在开源社区有超高人气,同时也获得了React官方的推荐。 ? Jest 本篇文章我们着重来介绍一下Jest,也是我们整个React单元测试的根基。 环境搭建 安装 安装Jest、Enzyme。.../** * setup * */ import Enzyme from "enzyme" import Adapter from "enzyme-adapter-react-16" Enzyme.configure...Mock 介绍jest中的mock之前,我们先来思考一个问题:为什么要使用mock函数? 在项目中,一个模块的方法内常常会去调用另外一个模块的方法。

    5.9K20

    QQ音乐商业化Web团队前端工程化实践总结

    模块化 模块化可以对复杂逻辑进行有效分割,每个模块更关注自身的功能,模块内部的数据和实现是私有的,通过向外部暴露一些接口来实现各模块间的通信。...使用define定义一个模块,使用require加载模块; 异步加载,可以并行请求依赖模块; 原生JavaScript运行环境无法直接执行AMD规范的模块代码,需要引入第三方库支持,如requirejs...使用import引入模块,export导出模块; 与CommonJS的执行时机不同,只是个只读引用,只会在真正调用的地方开始执行,而不是像CommonJS那样,在require的时候就会执行代码; 支持度暂不完善...[CSS模块化方案对比] 单元测试框架 单元测试框架我们选择了Jest,主要是因为开箱即用,不需要再引入断言库,生态也很好,较多用于React项目,而且组内的UI自动化测试系统是支持Jest的,这篇文章...ES module的import,需要jest.mock对整个模块进行mock。

    4.6K112

    前端构建新世代,Esbuild 原来还能这么玩!

    语句: import fib5 from 'fib(5)' console.log(fib5) // 13 所有的模块都是虚拟模块,在真实文件系统中并不存在 另外,还能借助虚拟模块来进行 URL...Import,支持如下的 import 代码: import React from 'https://esm.sh/react@17' 这也可以在插件当中实现,可参考示例。...代替 ts-jest 使用 esbuild-jest 代替ts-jest,我曾经尝试在某些大型包中使用 esbuild-jest 来作为 transformer,相比 ts-jest,整体大概提升 3...这方面 Esbuild 的作用跟现在 vercel 团队出品的 ncc 差不多,但会对代码的写法有一些限制,无法分析动态 require 或者 import 语句含有变量的情况: 6....之前三元同学基于 Esbuild 实现了一套 Web 开发脚手架 ewas,已经在 Github 开源,并且已成功落地到我之前的小册项目当中,相比 create-react-app 启动速度提升了 100

    2.3K10

    AI 协作开发:快速搭建线下超商门店数据看板脚手架开发实战

    配置中增加了SVGR处理器用于SVG图标,添加了路径别名简化导入语句,并可选地添加包分析插件帮助优化打包大小。重点逻辑:使用when条件语句来控制插件只在特定环境添加,避免生产包增加不必要的体积。...SVGR加载器将SVG文件转换为React组件,便于在代码中直接使用。路径别名映射将@components等符号链接映射到实际物理路径,简化导入语句。...我向AI助手提问:"如何为React数据看板组件编写测试用例,包括异步数据获取和用户交互测试?"AI提供了详细的测试策略和示例代码,推荐使用Jest和React Testing Library。...} from '@testing-library/react';import '@testing-library/jest-dom';import { Provider } from 'react-redux...通过模拟外部依赖(如dataService),可以隔离测试组件逻辑,提高测试速度和可靠性。重点逻辑:使用jest.mock自动模拟外部模块,控制测试环境。

    14020

    前端工程化实践总结 |

    模块化 模块化可以对复杂逻辑进行有效分割,每个模块更关注自身的功能,模块内部的数据和实现是私有的,通过向外部暴露一些接口来实现各模块间的通信。...使用define定义一个模块,使用require加载模块; 异步加载,可以并行请求依赖模块; 原生JavaScript运行环境无法直接执行AMD规范的模块代码,需要引入第三方库支持,如requirejs...使用import引入模块,export导出模块; 与CommonJS的执行时机不同,只是个只读引用,只会在真正调用的地方开始执行,而不是像CommonJS那样,在require的时候就会执行代码; 支持度暂不完善...CSS模块化方案对比 单元测试框架 单元测试框架我们选择了Jest,主要是因为开箱即用,不需要再引入断言库,生态也很好,较多用于React项目,而且组内的UI自动化测试系统是支持Jest的,这篇文章...ES module的import,需要jest.mock对整个模块进行mock。

    4.7K41

    对 React 组件进行单元测试

    无论是在代码的初始搭建过程中,还是之后难以避免的重构和修正bug过程中,常常会陷入逻辑难以梳理、无法掌握全局关联的境地。...简单来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。...React 单元测试中用到的工具 Jest 不同于"传统的"(其实也没出现几年)的 jasmine / Mocha / Chai 等前端测试框架 -- Jest的使用更简单,并且提供了更高的集成度、更丰富的功能...一般使用 Enzyme 中的 mount 或 shallow 方法,将目标组件转化为一个 ReactWrapper对象,并在测试中调用其各种方法: import Enzyme,{ mount } from...虽然 Jest 本身也有一些实现 spy 等的手段,但 sinon 使用起来更加方便。 III.

    5.2K40
    领券