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

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

前端自动化测试产生的背景 在开始介绍jest之前,我想有必要简单阐述一下关于前端单元测试的一些基础信息。 为什么进行测试?...正常情况下测试代码是同步执行的,但当我们测的代码是异步的时候,就会有问题了:test case实际已经结束了,然而我们的异步代码还没有执行,从而导致异步代码没有测到。 那怎么办呢?...如果test函数传入了done,jest就会等到done调用才会结束当前的test case,如果done没有调用,则该test自动不通过测试。...如果代码中使用了Promise,则可以通过返回Promise来处理异步代码,jest会等该promise的状态转为resolve时才会结束,如果promisereject了,则该测试用例不通过。...() 一般在真实的项目里,测试异步函数的时候,不会真正的发送 ajax 请求去请求这个接口,为什么

4.9K20

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

阅读和练习本文的Jest的部分 // Then 他能够把Given/When/Then的套路学会 他能够学会Jest的基本用法,包括测试suite和断言等语法 他能够学会Jest测试异步的几种方式 单元测试基础...现在就让我们一起来学习如何编写最基础的单元测试如果你已经有了使用 Jest 编写单元测试的经验,可以选择直接跳到第二段。...在同一个文件夹中创建一个 math.test.js 文件,在这里我们将使用 Jest测试 math.js 中定义的函数: const { sum } = require('....(逃 让我们先来看一下什么是异步请求,这里有一个通过 Chrome API 获取当前位置的实例,可想而知 Chrome 要根据 GPS 信号才能算出当前的经纬度,相当于从卫星?...未完待续…… ## 单元测试基础 ### 单元测试与自动化的意义 ### 为什么选择 Jest ### Jest 的基本用法 ### 该如何测试异步代码?

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

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

下面会根据各种场景进行分析 二、异步函数 在我们实际开发中我们会遇到很多异步函数,但是因为Jest在进行测试时,默认情况下一旦到达运行上下文底部当前测试立即结束,这样意味着测试将不能按照我们的预期进行,...好在Jest在针对异步函数测试也提供了我们多种方法。...第二:我们测试某个方法时,可能当前方法会夹杂对其他外部方法的调用,如果外部方法并不是一个纯函数,此时我们不应该再对外部方法再进行测试,而是通过Mock方式去模拟它。...原因是如果依赖测试功能的实现逻辑意味着修改实现逻辑但是输入输出没有变化也需要去更新测试代码。...一条测试保证只测试一种情况 只测试方法内逻辑,如果有引入其他方法(非纯函数通过mock处理,避免跳出当前测试代码 最后 我对单元测试得理解:如果只是为了测试用例能跑通代码的话,那单测对于我们来说意义并不大

10.2K20

异步函数中的异常处理及测试方法

你将学到什么 通过后面的内容你将学到: 如何从 Javascript 的异步函数中抛出错误 如何使用 Jest 测试来自异步函数的异常 要求 要继续往下读你应该: 对 Javascript 和 ES6...以下是该类的测试: ? 测试确实通过了: ? 安排的明明白白! 所以无论异常是从常规函数还是从类构造函数(或从方法)抛出的,一切都会按照预期工作。 但是如果我想从异步函数中抛出错误怎么办?...假设你添加异步方法来获取有关该人的数据。这种方法需要一个网址。如果url不是字符串,就要像上一个例子中那样抛出错误。 先来修改一下这个类: ? 如果我运行代码会怎么样?试试吧: ? 结果是这样 ?...总结 最后总结一下: 从异步函数抛出的错误不会是“普通的异常”。 异步函数异步方法总是返回一个Promise,无论是已解决还是拒绝。 拦截异步函数中的异常,必须使用catch()。...以下是在Jest测试异常的规则: 使用 assert.throws 来测试普通函数和方法中的异常 使用 expect + rejects 来测试异步函数异步方法中的异常 如果你对如何使用 Jest

2.9K30

前端自动化测试探索和实践

自动化测试实际上是运行一段测试代码,去验证目标代码是否满足某个期望。 本文后续的内容中,「“测试”一词将专门指代自动化测试」。 为什么测试? ?...为什么测试 我们进行测试的目的在于,及时发现错误,提高代码质量和开发效率,避免存在 BUG 的代码发布上线造成损失。 「测试自动化的好处在于反馈及时,能够极大地提高前端的开发效率。」...Jasmine Jasmine 是单测框架的“元老”,开箱即用,但是异步测试支持较弱。 Jest Jest 基于 Jasmine, 做了大量修改并添加了很多特性,同样开箱即用,但异步测试支持良好。...Augular 的默认测试框架就是 Karma + Jasmine,而 React 的默认测试框架是 JestJest 各种 React 应用推荐和使用。...执行顺序 「测试单元/用例执行顺序类似异步队列」 函数 Mock ? 函数 Mock ? 函数 Mock 小结 本篇文章介绍了前端自动化测试的一些基本概念和主流测试框架 Jest 的基础用法。

4.3K11

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

Jest配置 安装依赖包 需要使用Jest,首先你需要进行安装,执行以下命令: npm install jest -D 如果你的项目中存在.babelrc文件(使用了babel 6)时,不论你测试的代码是否通过...编写单元测试 在本章中,我们会针对如何编写单元测试文件进行一个具体的讲解,其中包含: 同步函数测试 异步函数测试 HTTP测试 同时,我们会对当中使用到的Jest和Sinon.js的API会进行简单介绍...通过上面三类测试,我们基本能够覆盖现有项目中的所有代码。 同步函数测试 同步函数测试过程是这几个中最简单的一部分,我们可以测试函数返回值,也能够测试传入的高阶函数。...// 判断callback函数调用了一次 expect(callback.mock.calls[0][0]).toBe('hjava'); // 判断了callback函数的第一次调用的第一个参数为...异步函数测试 异步函数主要分为两种——Callback方式和Promise方式。这两种方式都很简单,下面我们对两种方式进行具体的介绍。详细内容可以见Jest文档中的测试异步代码。

3.7K00

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

测试框架 断言 Mock 异步支持 代码覆盖率 测试框架 jest 简介 特点 开箱即用,零配置 快 内置代码覆盖率 容易 mock 安装 npm i --save-dev jest 查看版本 npx...编辑器 如果使用的是 vscode 并且安装了 jest 插件,那么可以实时并且直观的看到测试是否通过 Jest 实现异步测试 回调方式 // callback const fetchUser =...mock 为什么需要 Mock 前端需要网络请求 后端依赖数据库等模块 局限性:依赖其它的模块 Mock 解决方案 测试替代,将真实代码替换为替代代码。...Mock 的几大功能 创建 mock function,在测试中使用,用来测试回调 手动 mock,覆盖第三方实现,狸猫换太子 三大 API 实现不同粒度的时间控制 函数测试 function mockTest...const mockCB = jest.fn() mockTest(true, mockCB) // 函数是否调用过了 expect(mockCB).toHaveBeenCalled

1.3K20

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

在较大规模的前端项目中,测试对于保证代码质量十分重,而React的组件化和函数式编程, 这种相同输入一定返回相同输出的幂等特性特别适合单元测试。...快照测试:能够创造一个当前组件的渲染快照,通过和上次保存的快照进行比较,如果两者不匹配说明测试失败。 测试报告:内置了Istanbul,通过一定配置可以测试代码覆盖率,生成测试报告。...promise * toBeCalled:函数是否调用 * toBeCalledWith:函数是否以某些参数为入参调用 * assertions:检测用例中有多少个断言调用,一般用于异步测试 四、...七、Jest 异步测试 Jest单元测试是同步的,因此面对异步操作如fetch获取数据,需要进行异步的模拟测试。...创建一个mock函数,该mock函数不仅捕获函数的调用情况,还可以正常的执行spy的函数

5.9K30

Jest + React Testing Library 单测总结

运行指定文件中的测试用例),就可以得到测试结果,如: 当然,如果想要看到覆盖率的报告,可以使用 jest --coverage,或者 jest-report。...在组件单测中,有的时候我们可能只关注一个函数是否正确地调用了,或者只想要某个函数的返回值来支持该组件渲染逻辑是否正确,而并不关心这个函数本身的逻辑。...2.3.1 jest.fn() 通过 jest.fn(implementation) 可以创建 mock 函数如果没有定义函数内部的实现,mock 函数会返回 undefined。...渲染的组件,可以通过 debug 函数或者 screen 的 debug 函数在控制台输出组件的 HTML 结构。...screen 为测试用例提供了一个全局 DOM 环境,通过这个环境,我们就可以去使用库中提供的不同函数去定位元素,定位后的元素可以用于断言判断或者用户交互。

4.5K20

Jest:给你的 React 项目加上单元测试

Jest 是一款轻量的 JavaScript 测试框架,它的卖点是简单好用,由 facebook 出品。本文就简单讲讲如何使用 Jest 对 React 组件进行测试为什么需要单元测试?...Jest 基本使用 我们先写一个简单的函数,作为测试的模块。...test 方法创建了一个测试的作用域,该方法有三个参数: 测试的描述。 我们写测试代码的函数测试超时时间,默认为 5 秒,有些测试异步的,我们需要等待。...异步测试 如果使用异步测试,需要将 Promise 作为返回值。...也支持回调函数风格的测试,你需要调用函数传入的 done 函数来表明测试完成: test('异步测试', done => { setTimeout(() => { expect('前端西瓜哥

2.8K20

React Hook测试指南

在React为什么需要Hook中我们探讨了React为什么需要引入Hook这个属性,在React Hook实战指南中我们深入了解了各种Hook的详细用法以及会遇到的问题,在本篇文章中我将带大家了解一下如何通过为自定义...我们记住一句话:高质量的代码一定是可以测试的(testable)。那么为什么是在还没开始写代码之前就编写测试用例呢?...所谓的可重复性就是:如果我们的单元测试用例现在是可以通过的,那么在代码不发生变动和测试用例没有改变的前提下它将是一直可以通过的。...如果我们想通过单元测试来提高我们代码质量的话,我们就需要保证我们代码的覆盖率足够大,尽量让测试函数的每一种被执行情况都被覆盖到(覆盖率100%),特别是一些异常的情况应该也要被覆盖到(例如参数错误,...),组件需要被重新渲染,而这个重渲染是需要React进行调度的,因此是个异步的过程,我们可以通过使用act函数将所有会更新到组件状态的操作封装在它的callback里面来保证act函数执行完之后我们定义的组件已经完成了重新渲染

1.7K10

如何自动化测试 React Native 项目 (下篇) - 单元测试

当 snapshot 结果需要升级更新时, 只需要执行 jest -u 指令即可更新之前生成的 snapshot 结果。 为什么 Snapshot 在 React 测试中是可靠的呢?...举例我们测试一个 组件。...如果你的项目有难以测试函数/组件, 应该先想着如何refactor,把庞大复杂的逻辑/组件拆分成功能单一的单元, 尽量让一个函数只做一个task。...Reducer测试 Reducer 是纯函数, 因此测试的时候只要引入函数, 传入特定参数,判断函数返回是否符合预期即可。 可以利用 jest 的 snapshot test 来判断结果。...action 利用 jest 的 spy 函数, mock const dispatch = jest.fn(), 然后把 dispatch 传给异步 action 的函数, 并验证 dispatch

3.2K21

使用 Jest 进行前端单元测试

Mock Jest 自带一个 mock 系统,并支持自动和手动 mock。 通常项目中,测试的文件可能带有很多调用依赖,另外单元测试环境和真实环境可也能存在差异,使得脱离真实环境不能直接运行。...异步支持 如果有使用过 node-tap 之类的老测试框架,在遇到异步情况时候肯定感受过麻烦了。现代的测试框架对异步的支持都是必需的。...在 Jest 中也不用像 mocha 那样通过执行 done 来通知异步结束,而是直接返回 Promise 和 async/await 就好。...这样的代码不仅显得比较长,单独一个测试用例的 mock 也很长。可以设想如果代码中间的过程再增加,相应的 mock 还要再修改。怎么写才能够更加方便测试呢?...最后总结一下,编写可测试的代码,其实可以遵循这几个点来规范: 功能最小化,单一职责的函数 抽离业务逻辑中的公共部分 细分文件依赖 避免函数副作用(不修改实参) 其他还有很多可以优化的点不再阐述,感兴趣的推荐阅读一下

5.5K90

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

在这篇教程中,我们将学习如何测试更复杂的组件,包括用 Mock 去编写涉及外部 API 的测试,以及通过 Enzyme 来轻松模拟组件交互 初次尝试 Jest Mock 我们的应用程序通常需要从外部的...“聪明组件”,在 componentDidMount 生命周期函数通过 axios 模块异步获取数据。...首先通过 jest.spyOn,我们便可以监听一个函数的使用情况,然后使用配套的 toBeCalled Matcher 来判断该函数是否调用。整体代码十分简洁,同时也保持了很好的可读性。...从测试返回 promise 是确保 Jest 等待其异步方法执行结束的一种方法。 小结 在本文中,我们介绍了 mock 模块,并将其用于伪造API调用。...让测试通过 React文档[3] 里面提到:我们只能从函数式组件或其他 Hooks 中调用 Hooks。

4.7K20

Vue 应用单元测试的策略与实践 01 - 前言和目标

[^322](https://github.com/JimmyLv/jimmylv.github.io/issues/322) 为什么 TDD?但是我会讲为什么 UT 单元测试。...阅读和练习本文的Jest的部分 // Then 他能够把Given/When/Then的套路学会 他能够学会Jest的基本用法,包括测试suite和断言等语法 他能够学会Jest测试异步的几种方式 2...他能够在项目背景下合理配置单元测试测试策略 于是乎,这就是本系列文章的大纲,先放出来给大家一个对于 Vue 应用单元测试的全局观: ## 单元测试基础 ### 为什么选择 Jest ### Jest...的基本用法 ### 该如何测试异步代码?...未完待续…… ## 单元测试基础 ### 为什么选择 Jest ### Jest 的基本用法 ### 该如何测试异步代码?

86140
领券