Jest 前端单元测试工具
Jest和enzyme 前端单元测试工具

什么是Jest?
Jest是一个令人愉悦的JavaScript测试框架,其重点是简单性。
它适用于使用以下项目的项目:Babel,TypeScript,Node,React,Angular,Vue等!
特点
- 零配置
- 快照
- 隔离的
- 很棒的api
入门
使用yarn以下命令安装Jest :
yarn add --dev jest
或npm:
npm install --save-dev jest
或者全局global安装
例子
function sum(a, b) {
return a + b;
}
module.exports = sum;
覆盖率报告
jest --coverage
生成基本配置
jest --init
语法
匹配器
toBe 普通匹配
test('two plus two is four', () => {
expect(2 + 2).toBe(4);
});
// 用来检测基本数据的相等,对象需要使得toEqual
toEqual
相当于深比较,会递归对象或数组
特殊类型判断
- toBeNull 仅匹配 null
- toBeUndefined 仅匹配 undefined
- toBeDefined 与...相反 toBeUndefined
- toBeTruthy匹配if语句视为真实的任何内容
- toBeFalsy匹配if语句视为假的任何内容
异步方法测试
callback 回调
这里需要一个done来调用,然后使用try catch包裹。
test('测试回调异步',(done)=>{
let callback= (res)=>{
expect(res).toBe('this is callback');
}
Ajax(callback)
})
promise
这里主要特指使用Promise的异步方法,回调`callback
test('测试promise的异步操作',()=>{
Post("ok").then((res)=>{
expect(res).toBe('ok');
})
Post("x").catch((res)=>{
console.log(res) expect(res).toBe('error');
})
})
enzyme
nzyme 来自 airbnb 公司,是一个用于 React 的 JavaScript 测试工具,方便你判断、操纵和历遍 React Components 输出。Enzyme 的 API 通过模仿 jQuery 的 API ,使得 DOM 操作和历遍很灵活、直观。Enzyme 兼容所有的主要测试运行器和判断库。
安装与配置
npm install --save-dev enzyme
安装Enzyme Adapter来对应React的版本 npm install --save-dev enzyme-adapter-react-16
babel配置
yarn add --dev jest babel-jest @babel/preset-env @babel/preset-react react-test-renderer // babel.config.js
module.exports = {
presets: ['@babel/preset-env', '@babel/preset-react'],
};
shallow 浅渲染
将组件渲染成虚拟DOM对象,只会渲染第一层,子组件将不会被渲染出来,因而效率非常高。
Enzyme.configure({
adapter:new Adapter()
})
test('测试react组件',()=>{
let test = shallow(<Test value="1"/>) console.log(test.find('div').text()) // expect(test.prop('value')).toBe("1");
console.log(test.props())
console.log(test.state())
expect(test.text()).toBe("2")
})
test('测试事件操作',()=>{
let test = shallow(<Test value={1}/>);
test.simulate('click')
console.log(test.state('dv'))
expect(test.text()).toBe("3");
test.simulate('click') expect(test.text()).toBe("4");
})
避免每个文件中都引用adapter,可以在根目录下建个jest.setup.js文件,然后在jest.config.js中指定启动路径。
render 静态渲染
将React组件渲染成静态的HTML字符串,然后使用Cheerio这个库解析这段字符串,并返回一个Cheerio的实例对象,可以用来分析组件的html结构。
mount 完全渲染
将组件渲染加载成一个真实的DOM节点,用来测试DOM API的交互和组件的生命周期,用到了jsdom来模拟浏览器环境。
sinon spy模拟函数
与mock基本相同
安装
npm install sinon --save-dev let spy = sinon.spy(NumberInput.prototype,'componentWillReceiveProps')//监听生命周期
console.log(spy.calledCount)
本文源码地址:https://github.com/tianxiangbing/share/tree/master/jest
Jest 前端单元测试工具的更多相关文章
- 前端自动化测试工具--使用karma进行javascript单元测试(转)
Karma+Jasmine+PhantomJS组合的前端javascript单元测试工具. 1.介绍 Karma是由Google团队开发的一套前端测试运行框架,karma会启动一个web服务器,将js ...
- 前端自动化测试工具doh学习总结(二)
一.robot简介 robot是dojo框架中用来进行前端自动化测试的工具,doh主要目的在于单元测试,而robot可以用来模仿用户操作来测试UI.总所周知,Selenium也是一款比较流行的前端自动 ...
- 前端自动化测试工具doh学习总结(一)
前言 项目中需要用到前端自动化测试,自己被当作一个探针研究了下目前用的比较多的web自动化测试工具.一开始研究的是的selenium,但由于项目使用了大量的dijit控件,写起testCase来很费劲 ...
- 在WebStorm中集成Karma+jasmine进行前端单元测试
在WebStorm中集成Karma+jasmine进行前端单元测试 前言 好久没有写博了,主要还是太懒=.=,有点时间都去带娃.看书了,今天给大家分享一个原创的小东西,如果大家对TDD或者BDD有兴趣 ...
- 前端单元测试框架-Mocha
引言 随着前端工程化这一概念的产生,项目开发中前端的代码量可谓是'急剧上升',所以在这种情况下,我们如何才能保证代码的质量呢,对于框架,比如React.Vue,因为有自己的语法规则,及时每个开发人员的 ...
- 前端构建工具 Gulp.js 上手实例
在软件开发中使用自动化构建工具的好处是显而易见的.通过工具自动化运行大量单调乏味.重复性的任务,比如图像压缩.文件合并.代码压缩.单元测试等等,可以为开发者节约大量的时间,使我们能够专注于真正重要的. ...
- 前端构建工具 Grunt 入门
之前也介绍过前端构建工具 Ant 和 Yeoman,其中 Yeoman 工具就包含了 Grunt 所以就不多说.那么与 Ant 相比 Grunt 有这么几个优点: Javascript 语法,相比 A ...
- 单元测试工具 - karma
在离开上一家公司之前,team leader 在我离开前留给了我最后几个关键字:karma,断言库,JASMINE,QUNIT,MOCHA. 可一直拖拖沓沓的,没有去了解.直到今天,才终于抽出心情和时 ...
- 使用Jest进行单元测试
Jest是Facebook推出的一款单元测试工具. 安装 npm install --save-dev jest ts-jest @types/jest 在package.json中添加脚本: “te ...
随机推荐
- IOS 手动添加第三方库报错问题
当不想使用CocoaPods来管理和使用第三方库的时候,就需要手动添加和配置这些第三方库,难免会出现一些问题,主要问题汇总如下: 1.AFNetworking.NKNetWork.ZxingObjC等 ...
- 解析Tomcat构成及运行原理
本文的知识点分为: Server.Service.Connector.Container四大组件之间的关系和联系,以及他们的主要功能点: Tomcat执行的整体架构,请求是如何被一步步处理的: Eng ...
- spring boot 源码赏析之事件监听
使用spring Boot已经快1年多了,期间一直想点开springboot源码查看,但由于种种原因一直未能如愿(主要是人类的惰性...),今天就拿springboot 的监听事件祭刀. spring ...
- 用pymysql和Flask搭建后端,响应前端POST和GET请求
前言 这次作业不仅需要我建立一个数据库(详情请点击这里),还需要我基于这个数据库写后端接口(注册和登录)供前端访问,接收前端的POST和GET请求,并将登录.注册是否成功传给前端. 本文介绍如何用Fl ...
- 模块 psutil 系统信息获取
psutil模块介绍 psutil是一个开源切跨平台的库,其提供了便利的函数用来获取才做系统的信息,比如CPU,内存,磁盘,网络等.此外,psutil还可以用来进行进程管理,包括判断进程是否存在.获取 ...
- JS 剑指Offer(六) 用两个栈实现队列
题目:用两个栈实现队列,实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数,若队列中没有元素deleteHead返回-1 分析:在队列的尾部插入 ...
- 轻轻松松了解Java的初始化方法(含对象数组的小问题)
Java基础复习6-初始化 之前讲过了类的一些基础,想必大家都知道了类的定义 什么?你忘了? 下面给你一个例子快速复习 class AClass{ int a; boolean b; void get ...
- 使用Shiro+JWT完成的微信小程序的登录(含讲解)
使用Shiro+JWT完成的微信小程序的登录 源码地址https://github.com/Jirath-Liu/shiro-jwt-wx 微信小程序用户登陆,完整流程可参考下面官方地址,本例中是按此 ...
- 《Three.js 入门指南》1.3 - Three JS 功能预览
[部分中英文对照] Cameras(照相机,控制投影方式) Camera OrthographicCamera 正交相机 PerspectiveCamera 透视相机 Core(核心对象) Buffe ...
- JS中this指向问题和改变this指向
首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然 ...