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

Vue 应用单元测试的策略与实践 02 - 单元测试基础

现在就让我们一起学习如何编写最基础的单元测试。 如果你已经有了使用 Jest 编写单元测试的经验,可以选择直接跳到第二段。...在同一个文件夹中创建一个 math.test.js 文件,在这里我们将使用 Jest 测试 math.js 中定义的函数: const { sum } = require('....单元测试站在使用者的角度来使用该模块,而代码的易测性也就代表着代码的可维护性。 如何测试异步代码?...但这种方式侵入性比较强,对测试语句不友好且违背了 Given/When/Then 的三段式套路,就像回地狱一样的道理,如果让 done() 充斥着测试那么代码也就变得混乱。...唯一需要注意的是, 额外的expect.assertions(number) 其实是验证在测试期间所调用的断言数量,这在测试多层异步代码时很有用,以确保实际调用回中的断言次数。 意犹未尽吗?

2.2K20

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

jest提供了三种方案测试异步代码,下面我们分别来看一下。 done 关键字 当我们的test函数中出现了异步回函数时,可以给test函数传入一个done参数,它是一个函数类型的参数。...).toEqual({ success: true }) done() }) }) 上面的代码中,我们给test函数传入了done参数,在fetchData的回函数中调用了...但这里我们思考一种场景:如果使用done测试回函数(包含定时器场景,如setTimeout),由于定时器我们设置了 一定的延时(如 3s)后执行,等待 3s 后会发现测试通过了。...如果代码中使用了Promise,则可以通过返回Promise来处理异步代码,jest会等该promise的状态转为resolve时才会结束,如果promise被reject了,则该测试用例不通过。...).toBeCalled(); // 断言mockFn被调用了一次 expect(mockFn).toBeCalledTimes(1); // 断言mockFn传入的参数为1, 2, 3

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

前端单元测试那些事

目前除了 Facebook 外,Twitter、Airbnb 也在使用 JestJest 除了基本的断言和 Mock 功能外,还有快照测试、实时监控模式、覆盖度报告等实用功能。...分支覆盖率(branch coverage)是否每个函数都调用了函数覆盖率(function coverage)是否每个if代码块都执行了?...官方文档 3.3 Jest的常用断言 expect(1+1).toBe(2)//判断两个值是否相等,toBe不能判断对象,需要判断对象要使用toEqual expect({a: 1}).toEqual(...API,分别是jest.fn()、jest.spyOn()、jest.mock() jest.fn() - 是创建Mock函数最简单的方式,如果没有定义函数内部的实现,jest.fn()会返回undefined...对象执行了回函数 注:有时候会存在一种情况,在同个组件中调用同个方法,只是返回值不同,我们可能要对它进行多次不同的mock,这时候需要在beforeEach使用restoreAllMocks方法重置状态

4.3K40

Jest + React Testing Library 单测总结

1.3 组件单测须知 在开始进行组件单测的时候,有几个因素我们需要考虑: 组件是否按照既定的条件 / 逻辑进行渲染 组件的事件回是否正确 异步接口如何校验 异步执行完毕后的操作如何校验 .........2、Jest使用 Jest 的安装这里就不赘述了,如果使用 create-react-app 创建项目,Jest 和 React Testing Library(RTL) 都已经默认安装了。...在组件单测中,有的时候我们可能只关注一个函数是否被正确地调用了,或者只想要某个函数的返回值支持该组件渲染逻辑是否正确,而并不关心这个函数本身的逻辑。...// 断言 mockFn 的执行后返回 undefined expect(res).toBeUndefined(); // 断言mockFn被调用了两次 expect(mockFn).toBeCalledTimes...如果找到了多个元素就会 throw error,这时就需要使用 getAllBy...。

4.5K20

使用Jest测试包含setTimeout调用的函数踩坑记录

回到我们的测试用例,原因也就明确了:调用enqueueJob之后,catch中的回被加入了队列,而随后的delay则相当于直接调用了setTimeout(前面说到Promise对象构造时的回函数是立刻执行的...虽然从错误信息中我们知道可以通过jest.setTimeout修改这个默认超时时间,但这个测试用例在实际运行的时候也的确需要等待6s,如果我们有什么测试用例需要等待几分钟甚至几小时,那总不能在CI上卡个几小时等待用例通过吧...根据Jest的官方文档,调用这个函数后,所有队列中的“微任务”都会被立刻执行,这里的目的就是保证catch回能被立刻调用; 使用jest.advanceTimersByTime(6000)代替await...在我们调用完enqueueJob之后,我们通过对setTimeout的mock数据进行断言检查enqueueJob是否调用了setTimeout并传入了预期的时长。...断言通过后,我们再手动调用传入的回函数来模拟6s已经经过的场景。

6.7K60

【干货分享】微信小程序单元测试攻略

2,被测代码包含复杂的环境因素需要处理或模拟,例如使用了storage、调用了接口、使用了环境变量等。 (图片来源:码农翻身公众号) 但无论如何,有价值的东西就应该去做,不应该知难而退嘛。...该方法和sinon.spy一样,生成函数的“间谍”,可以断言函数的已调用次数、调用入参、调用返回等是否符合预期。...2.3.3 完整的断言方法 2.3.4 模拟数据mock 当被测方法包含环境因素不能直接测试时,例如使用了localStorage,又或者被测方法调用了接口,不希望测试时调用接口影响业务或降低测试速度...如果cache中没有该方法,再使用正常的方式import。...函数覆盖率(function coverage):是否每个函数都调用了? 3. 分支覆盖率(branch coverage):是否每个if代码块都执行了? 4.

2.6K40

万字详文:彻底搞懂 Jest 单元测试框架

什么是Jest 测试意味着什么 我怎么知道要测试什么 测试块,断言和匹配器 如何实现测试块 如何实现断言和匹配器 CLI 和配置 模拟 怎么模拟一个函数 执行环境 作用域隔离 V8 虚拟机 运行单测回...Jest 测试遵循 BDD 风格的测试,每个测试都应该有一个主要的 test 测试块,并且可以有多个测试块,现在可以为 sum 方法编写测试块,这里我们编写一个测试添加 2 个数字并验证预期结果。...expect 是一个断言,该语句使用输入 1 和 2 调用被测函数中的 sum 方法,并期望输出 3。 toBe 是一个匹配器,用于检查期望值,如果不符合预期结果则应该抛出异常。...如何实现测试块 测试块其实并不复杂,最简单的实现不过如下,我们需要把测试包装实际测试的回函数存起来,所以封装一个 dispatch 方法接收命令类型和回函数: const test = (name,...配置文件的参数来更改执行环境等,Jest 在这里使用了第三方库 yargs execa 和 chalk 等解析执行并打印命令。

7.6K20

web前端好帮手 - Jest单元测试工具

本文介绍如何使用Jest覆盖Web前端单元测试、如何统计测试覆盖率,Jest对比Mocha等内容。 Jest是什么? ? Jest是一个令人愉快的 JavaScript 测试框架,专注于简洁明快。...正如官方介绍所说,Jest是一款开箱即用的测试框架,其中包含了Expect断言接口、Mock接口、Snapshot快照、测试覆盖率统计等等全套测试功能。 为什么不推荐Mocha?...断言库常用接口 Jest内置Expect断言库,下面列举几个常用的断言方法就足以应付正常测试场景。.../test.txt"); expect(data.toString()).toBe("333"); }); 注意,Jest检测到异步测试时(比如使用了done或者函数返回promise),Jest会等待测试完成...首先,由于Jest启动多个进程,并发地跑测试,我们使用node-inspect的方式去跑断点调试时,chrome://inspect页面上断点不会被中断,导致我们无法断点调试。

4.9K40

【架构师(第二十七篇)】前端单元测试框架 Jest 基础知识入门

测试框架 断言 Mock 异步支持 代码覆盖率 测试框架 jest 简介 特点 开箱即用,零配置 快 内置代码覆盖率 容易 mock 安装 npm i --save-dev jest 查看版本 npx...jest --version 27.5.1 断言示例 test('test common matcher', () => { expect(2 + 2).toBe(4); }); test('test...({ name: 'warbler' }); }); 测试结果 编辑器 如果使用的是 vscode 并且安装了 jest 插件,那么可以实时并且直观的看到测试是否通过 Jest 实现异步测试 回方式...Mock 的几大功能 创建 mock function,在测试中使用,用来测试回 手动 mock,覆盖第三方实现,狸猫换太子 三大 API 实现不同粒度的时间控制 函数测试 function mockTest...jest.runOnlyPendingTimers() // 调用次数 expect(callback).toHaveBeenCalledTimes(1) // 上一次调用的参数

1.3K20

提高代码质量——使用Jest和Sinon给已有的代码添加单元测试

Jest与Sinon.js是什么 Jest是FaceBook推出的一个针对JavaScript进行单元测试的库,它提供了断言函数模拟等API对你自己编写的业务逻辑代码进行测试后。...Jest配置 安装依赖包 需要使用Jest,首先你需要进行安装,执行以下命令: npm install jest -D 如果你的项目中存在.babelrc文件(使用了babel 6)时,不论你测试的代码是否通过...(callback.mock.calls.length).toBe(1); // 判断callback函数被调用了一次 expect(callback.mock.calls[0][0]).toBe...如何设置单元测试使用ES2015配置 如果你的单元测试文件中需要使用ES2015后通过babel进行编译,那么需要对.babelrc文件的配置进行部分修改。...webpack alias问题 如果我们在项目中使用了webpack,那么我们很大概率会使用到alias相关属性定义路径。

3.7K00

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

通用测试 单元测试最核心的部分就是做断言,比如传统语言中的 assert 函数如果当前程序的某种状态符合 assert 的期望此程序才能正常执行,否则直接退出应用。...其他的断言库还有 expect.js should.js better-assert[4] , unexpected.js[5] 这些断言库都只提供纯粹的断言函数,可以根据喜好选择不同的库使用。...给每一个文件都要手动引入 chai 比较麻烦 ,这时候可以给 mocha 配置全局脚本,在项目根目录 .mocharc.js 文件中加载断言库, 这样每个文件就可以直接使用 expect 函数了。...如果原始代码已经是 CJS了,可以使用 browserify 支持浏览器端运行,基本零配置,但是往往现实世界比较复杂,我们有 ES6,JSX 以及 TypeScript 要处理,所以这里我们使用 webpack...,而且支持的功能更加清晰,不用考虑如何组合使用的问题,而且下文介绍的 jest 测试框架也是使用这种风格。

9.5K20

React + Redux Testing Library 单元测试

在同一个文件夹中创建一个 math.test.js 文件,在这里我们将使用 Jest 测试 math.js 中定义的函数: image.png 然后运行 yarn test (添加 NPM Script...Callback 回函数 it('the data is peanut butter', done => { function callback(data) { expect(data)....唯一需要注意的是, 额外的expect.assertions(number) 其实是验证在测试期间所调用的断言数量,这在测试多层异步代码时很有用,以确保实际调用回中的断言次数。...使用函数来执行修改 为了描述 action 如何改变 state tree ,你需要编写 reducers。这也就是 CQRS 中 command(命令)的一种实现。...然后我们就可以使用 Jest 模拟一个 action 的行为再传给 store,而 actionClick 这个伪造函数能够让我们去断言该 action 是否被调用过。

2.3K10

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

本篇教程是 JavaScript 测试系列实战 的第一篇教程,首先介绍了测试的类型,然后主要通过一个 React 项目教会你如何使用 Jest 编写第一个测试,然后使用 Enzyme 对 React 组件进行浅层渲染...2 ;第二个参数则是一个待执行的测试函数 在测试函数中,最重要的组成部分就是断言(Assertion),例如上面的 expect(divide(6, 3)).toBe(2) 断言的核心是 expect...函数,它接受一个表达式,然后后面可以调用 Matcher 测试该表达式是否符合条件,例如这里我们就使用了最常用的 toBe Matcher;Jest 还提供了大量的 Matcher,可以帮助我们写出更简洁可读的断言语句...因此这里建议直接使用 npx jest 执行测试。 编写第一组测试 每个测试文件通常有多个测试用例。Jest 允许我们通过 describe 函数对测试用例进行分组,它创建了一个可以组合多个测试的块。...配置 jest-enzyme 你应该还记得,在刚才的测试代码中,我们还是使用了 Jest 自带的 Matcher(toEqual)。

2.9K10

实例入门 Vue.js 单元测试

由此,我们对一次单元测试的过程有了基本的了解。 首先,对所谓“单元”的定义是灵活的,可以是一个函数,可以是一个模块,也可以是一个 Vue Component。...expect(spy.callCount).toEqual(1); 1.7 stub 有时候会使用stub嵌入或者直接替换掉一些代码,达到隔离的目的 一个stub可以使用最少的依赖方法模拟该单元测试...(function coverage):是否每个函数都调用了 行覆盖率(line coverage):是否每一行都执行了 测试结果根据覆盖率被分为“绿色、黄色、红色”三种,应该关注这些指标,测试越全面,...四个基础单词 编写单元测试的语法通常非常简单;对于jest来说,由于其内部使用了 Jasmine 2 进行测试,故其用例语法与 Jasmine 相同。...我们可能习惯于依靠双手和眼睛,一次次的验证我们写过的组件;但如果你打算对每个组件的每个改动都手动验证的话,或早或晚就会因为疲惫或懈怠,导致瑕疵留在代码中。 这就是自动化的单元测试为何重要的原因。

2.8K20

单元测试

它的主要作用是使你能够在测试中对使用了 Canvas 的代码进行断言和验证,而无需实际渲染真实的画布。...对于包含多个组件的文件,可以使用文件名作为文件名,并在文件名后面添加 .spec.tsx 后缀。例如,如果文件名是 Form.tsx,则文件名可以是 Form.spec.tsx。...act 的使用场景如下: 当你在测试中进行与 React 组件的交互(例如模拟用户点击、输入等)时,可以使用 act 确保组件在更新后进行正确的断言。...当你在测试中进行异步操作(例如使用 setTimeout、Promise 等)时,可以使用 act 等待异步操作完成后再进行断言。...建议: 把副作用放在 waitFor 回的外面,回里只能有断言 waitFor 的 callback 里只放一个断言 组件内使用 style jsx 报错 import React from '

18610

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

此时老框架针对其内部API函数,写了充分的单侧用例。在开发新框架时,直接运行老前端框架的单侧用例,如果所有测试用例都通过,则可快速保证内部api的一致性,快速验证所有功能。...默认支持默认支持默认支持友好Karma不支持,需第三方配置不支持,需第三方配置不支持,需第三方配置不支持,需第三方配置MochaMocha 是生态最好,使用最广泛的单测框架,但是他需要较多的配置实现它的高扩展性.../src/fetch.js'test('fetchPostsList中的回函数应该能够被调用', async () => { expect.assertions(1); let mockFn =...jest.fn(); await fetch.fetchPostsList(mockFn); // 断言mockFn被调用 expect(mockFn).toBeCalled();})测试快照用法...那么如何避免这个问题呢?使用Snapshot快照可以解决。

3.3K30

react生态下jest单元测试

一:jest框架搭建 1.在本地创建一个目录jest_practice 2.使用编辑器VScode打开目录,紧接着在终端中打开,执行npm init 图片 3.执行以下命令: 注意:这里我们使用cnpm...a.建议使用npm install –g jest(不需要单个去安装依赖),修改package.json文件即可。...: "test": "jest --config jest.config.json --no-cache --colors --coverage" 5.搭建好之后需要写个demo测试是否正确 图片...%Funcs函数覆盖率(function coverage):是不是每个函数都调用了? %Lines行覆盖率(line coverage):是不是每一行都执行了?...后面每次再运行快照测试时,都会和第一次的比较,若组件代码有所改变,则快照测试会失败,如果组件代码是最新的,优化过得代码,则需要更新快照,免得每次执行报错。

2.2K20
领券