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

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

本篇教程是 JavaScript 测试系列实战 的第一篇教程,首先介绍了测试的类型,然后主要通过一个 React 项目教会你如何使用 Jest 编写第一个测试,然后使用 Enzyme 对 React 组件进行浅层渲染...您可以测试应用程序的许多方面,从单个函数及其返回值到在浏览器中运行的复杂应用程序。万丈高楼平地起,让我们先来了解一下有哪些测试。...因此这里建议直接使用 npx jest 执行测试。 编写第一组测试 每个测试文件通常有多个测试用例。Jest 允许我们通过 describe 函数对测试用例进行分组,它创建了一个可以组合多个测试的块。...它允许我们在运行测试,只渲染父组件而不渲染其所有的子组件。浅层渲染十分快速,因此非常适合单元测试。...首先让我们创建一个简单的 React 组件创建 src/App.js ,代码如下: // src/App.js import React from 'react'; const App = () =

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

react生态下jest单元测试

一:jest框架搭建 1.在本地创建一个目录jest_practice 2.使用编辑器VScode打开目录,紧接着在终端中打开,执行npm init 图片 3.执行以下命令: 注意:这里我们使用cnpm...后面每次再运行快照测试,都会和第一次的比较,若组件代码有所改变,则快照测试失败,如果组件代码是最新的,优化过得代码,则需要更新快照,免得每次执行报错。...如果尝试对这些对象进行快照,它们将强制快照在每次运行时失败. //2.Jest允许为任何属性提供非对称匹配器。...如果尝试对这些对象进行快照,它们将强制快照在每次运行时失败. //2.Jest允许为任何属性提供非对称匹配器。...num1 * num2; }); expect(mockFn(9, 9)).toBe(100); }); test('测试jest.fn()返回promise', async () =>

2.2K20

Vue Router 之单元测试

创建组件 我们会设置一个简单的 ,包含一个 /nested-child 路由。访问 /nested-child 则渲染一个 子组件。...污染测试的全局命名空间,我们将会在测试创建基础的路由。这让我们能在单元测试期间更细粒度的控制应用的状态。 编写测试 先看点代码再说吧。...这在某种程度上很理想 -- 若真实路由一旦失败,单元测试随之失败,这样我们就能在部署应用之前修复这类问题。...比如,当渲染整个 组件,正赶上渲染树很大,包含了许多组件,一层层的组件又有自己的子组件。这么些个子组件都要触发各种生命周期钩子、发起 API 请求什么的。...总结 本文覆盖了: 测试由 Vue Router 条件渲染的组件jest.mock 和 localVue 去 mock Vue 组件 从 router 中解耦全局导航 guard 并对其独立测试

1.9K10

Jest + React Testing Library 单测总结

2.3.1 jest.fn() 通过 jest.fn(implementation) 可以创建 mock 函数。如果没有定义函数内部的实现,mock 函数会返回 undefined。...   }); }); 其实,在我们编写组件测试用例,都可以通过 debug 函数把组件渲染结果打印出来,这可以提高我们编写用例的效率,同时,这一特点也很符合 RTL 的设计观念。...get 和 query 的区别主要是在未找到元素,queryBy 会返回 null,这对于我们测试一个元素是否存在非常有帮助。...createEvent() 创建新事件。 currentTarget 返回其事件侦听器触发事件的元素。...target 返回触发事件的元素。 timeStamp 返回创建事件的时间(相对于纪元的毫秒数)。 type 返回事件名称。

4.5K20

对 Vue-Router 进行单元测试

污染测试的全局命名空间,我们将会在测试创建基础的路由;这让我们能在单元测试期间更细粒度的控制应用的状态。 编写测试 先看点代码再说吧。...这在某种程度上很理想 -- 若真实路由一旦挂了,单元测试失败,这样我们就能在部署应用之前修复这类问题。...比如,当渲染整个 组件,正赶上渲染树很大,包含了许多组件,一层层的组件又有自己的子组件。这么些个子组件都要触发各种生命周期钩子、发起 API 请求什么的。...route", () => { const next = jest.fn() NestedRoute.beforeRouteLeave(undefined, undefined, next)...总结 本文讲述了: 测试由 Vue Router 条件渲染的组件jest.mock 和 localVue 去 mock Vue 组件 从 router 中解耦全局导航 guard 并对其独立测试

2.2K10

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

在较大规模的前端项目中,测试对于保证代码质量十分重要,而React的组件化和函数式编程, 这种相同输入一定返回相同输出的幂等特性特别适合单元测试。...快照测试:能够创造一个当前组件的渲染快照,通过和上次保存的快照进行比较,如果两者不匹配说明测试失败测试报告:内置了Istanbul,通过一定配置可以测试代码覆盖率,生成测试报告。...('InteractionManager'); 六、Jest UI快照测试 Jest提供了snapshot快照功能用于UI测试,可以创建组件的渲染快照并将其与以前保存的快照进行比较,如果两者不匹配,则测试失败..._onClear).toBeCalled();//测试组件实例上的方法是否被调用 九、Redux测试 在使用React或者React Native通常会使用Redux进行状态的管理,需要mock store...; 通过单元测试,给项目带来了不少好处: 通过单元测试可以确保代码得到预期的结果,在测试环境中就发现bug; 当修改依赖的组件,能在测试中发现被影响组件的错误,这样可以支持我们更好的重构代码,有利于项目的长期迭代

6K30

前端自动化测试实践03—jest异步处理&mock

promise 处理成功,需要指定返回 expect 数量,否则可能直接走失败分支跳过 test('fetchData2 返回结果为 { success: true }', () => { /...(response.data).toEqual({ success: true }); }) }) 处理失败,需要指定返回 expect 数量,否则可能直接走成功分支跳过 test('fetchData2...1 test('fetchData2 返回结果为 404', async () => { await expect(fetchData2()).rejects.toThrow(); }) 失败处理方式.../mock'); 4. mock - function 模拟函数调用 对于单元测试,无需关心外部传入的函数的实现,使用 jest.fn 生成一个 mock 函数,可以捕获函数的调用和返回结果,以及this..., undefined, undefined ], invocationCallOrder: [ 1, 2, 3 ], results: [ { type: 'return

5.1K85

前端单元测试那些事

回车后会在项目目录下自动生成Jest.config.js配置文件,当然也可以选择第二种,手动创建 手动创建并配置 Jest.config.js const path = require('path');...当我们完成单元测试覆盖率达不到100%,不用慌,不用过度追求100%的覆盖率,把核心的功能模块测通即可,当然如果你要设置最低的覆盖率检测,可以在配置中加入如下,如果覆盖率低于你所设置的阈值(80%),则测试结果失败不通过...修改实例 wrapper.find找到相应的dom并触发事件`wrapper.find('.kauthcode_btn').trigger('click'); propsData - 组件被挂载对props...,如果没有定义函数内部的实现,jest.fn()会返回undefined作为返回值,当然你也可以给他设置返回值、定义内部实现或返回Promise对象,如下例: // 断言mockFn执行后返回值为name...踩坑点 1.触发事件 - 假设组件库使用的是iview中对提供的@change事件,但是当我们进行 wrapper.trigger('change'),是触发不了的。

4.3K40

EasyNVR在官网运行测试录像播放失败是什么原因?

我们在官网对EasyNVR运行进行了测试,发现本次测试中录像播放不出来,查看返回的录像地址发现路径拼接错误: image.png 于是查找了对应接口,发现路径是在mediaserver/tsingsee.ini...中配置的: image.png 经过测试后发现,当路径配置为相对路径返回的数据是正确的,但是为绝对路径就会出错。...通过打断点调试后了解到,是因为官网配置文件里的绝对路径后面多了一个斜杠,虽然直接删除斜杠就能返回正确的路径数据,但是在实际给用户使用时不知道用户自己配置会不会加上斜杠,所以需要在代码里做兼容处理,直接使用...strings.TrimRight去除后面的斜杠: image.png 修改后运行测试录像路径返回正常,回看可以正常播放。

76220

EasyNVR在官网运行测试录像播放失败是什么原因?

我们在官网对EasyNVR运行进行了测试,发现本次测试中录像播放不出来,查看返回的录像地址发现路径拼接错误: 于是查找了对应接口,发现路径是在mediaserver/tsingsee.ini中配置的:...image.png 经过测试后发现,当路径配置为相对路径返回的数据是正确的,但是为绝对路径就会出错。...通过打断点调试后了解到,是因为官网配置文件里的绝对路径后面多了一个斜杠,虽然直接删除斜杠就能返回正确的路径数据,但是在实际给用户使用时不知道用户自己配置会不会加上斜杠,所以需要在代码里做兼容处理,直接使用...strings.TrimRight去除后面的斜杠: 修改后运行测试录像路径返回正常,回看可以正常播放。

84710

如何发布一个 TypeScript 编写的 npm 包

添加测试作为一名负责任的开发,我们将从测试开始。我们将使用jest,因为它简单且好用。...preset: "ts-jest", // ...}最后,创建src目录,以及测试文件src/digx.test.ts,填入如下代码:import dg from "....使用npm t运行测试,当然,不出意外会失败。...当一切准备就绪,就可以运行:npm publish测试一下让我们创建一个全新的项目并安装我们的模块。npm install --save digx现在,让我们写一个简单的程序来测试它。...总结我们从头开始创建并发布了一个简单的npm包。我们的库提供了一个ESM模块,TypeScript的类型,使用jest覆盖测试用例。你可能会认为,这其实一点都不难,的确如此。

1.4K20

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

而针对与我们前端来说,我认为单测就是:UI测试和逻辑测试,逻辑测试包含:工具类/函数、业务相关代码测试。UI测试分为:公共组件和业务组件测试。 为什么要写单元测试?...每个方法都有不同的使用场景,每个API都会生成一个mock模拟函数,Jest对模拟函数提供了很多方法给予我们模拟方法的返回、实现等等,可移至文档参考 jest.fn jest.fn主要是创建一个模拟函数...创建的模拟,其他Mock需要手动恢复 其中jest.restoreAllMocks | .restoreMock 比较特别,只能用于jest.spyOn创建的模拟,因为jest.spyOn包装了原始功能...而jest.mock的调用方式有所不同。Jest接管require系统,jest.mock告诉Jest,它在需要返回模块模拟,而不是实际模块。...如果我们在测试用例中直接访问window.bridage.callPhone,会提示Cannot read properties of undefined,因为jsdom中并没有对应的api实现,所以我们需要在测试前构造一个模拟的方法

10.2K20

前端单元测试Jest

,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便继续进行测试测试方法。...Mock函数通常会提供以下三种特性: 捕获函数调用情况; 设置函数返回值; 改变函数的内部实现; jest.fn() jest.fn()是创建Mock函数最简单的方式,如果没有定义函数内部的实现,jest.fn...()会返回undefined作为返回值。...Snapshot 快照测试第一次运行的时候会将被测试ui组件在不同情况下的渲染结果保存一份快照文件,后面每次再运行快照测试,都会和第一次的比较,除非执行“yarn test – -u”命令删除快照文件...] = ` 我是react组件 `; 如果被测试代码有正常更新,可以使用“jest --updateSnapshot ”命令重新更新缓存文件。

2.7K20

Jest测试语法系列之Matchers

关于Jest测试的基础内容,可以参考之前的博客:前端单元测试Jest 本文主要讲的是匹配器(Matchers),匹配器(Matchers)是Jest中非常重要的一个概念,它可以提供很多种方式来让你去验证你所测试返回值...后面的 toBe 就是一个matcher,当Jest运行的时候它会记录所有失败的matcher的详细信息并且输出给用户,让维护者清楚的知道failed的原因,如果我们改成 toBe(5),将会输出错误的提示...,如下图: toBe 是测试具体的某一个值,如果需要测试对象,需要用到toEqual。...,有时需要区分undefined、null和false,这些可以使用Jest的真实性匹配。...toBeNull 仅当expect返回对象为 null; toBeUndefined 仅当返回undefined; toBeDefined 和上面的刚好相反,对象如果有定义; toBeTruthy

52120
领券