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

最新文章

  1. ES6 - Note4:Class类
  2. 现代软件工程 第十六章 【IT 行业的创新】练习与讨论
  3. Win7下:编译器错误信息: CS0016: 未能写入输出文件
  4. [Unity2D]脚本的使用规则
  5. 【HDOJ】【3530】Subsequence
  6. Bzoj 3781: 小B的询问 莫队,分块,暴力
  7. cf459C Pashmak and Buses
  8. CentOS 6 用SVN自动提交文件到web服务器
  9. SharePoint 2013 图文开发系列之列表定义高级篇
  10. Python学习--13 文件I/O
  11. iOS CocoaPods一些特别的用法 指定版本、版本介绍、忽略警告
  12. ubuntu16.04无法获取ip地址的解决方案
  13. python 网络编程 IO多路复用之epoll
  14. Select查询命令
  15. Java 中的 int 型转为 long 型
  16. Linux中cp直接覆盖不提示的方法
  17. 20145330 《网络对抗》 Web安全基础实践
  18. SQLServer 重建索引前后对比 (转)
  19. [AT2567] [arc074_c] RGB Sequence
  20. 实例讲解启动mysql server失败的解决方法

热门文章

  1. MATLAB 一维随机变量及其概率分布
  2. codeforces 466c(暴力枚举)
  3. Oracle ROWNUM用法
  4. 记一次Windb死锁排查
  5. vscode 保存自动 格式化eslint 代码
  6. Java基础知识2-Java基本语法
  7. Redis 练习(二)
  8. Linux bash篇(二 操作环境)
  9. modelform+代码发布系统前奏
  10. Array(数组)对象--&gt;pop() 方法