安装
sudo npm install -g mocha
复制代码
最简单的使用
var expect = require('chai').expect
describe('测试套件1', function(){
it('测试用例1', function(){
expect(1 + 1).to.be.equal(2)
})
})
复制代码
名次解释
- decribe:测试套件,表示一组相关的测试
- it:测试用例,表示一个单独的测试,也是测试的最小单位
测试脚本包括一个或多个describe,一个describe包括一个或多个it
断言
断言库:chai
注意
如果断言不成立,就会抛出一个错误❌,只要不抛出错误,测试就算通过
expect断言的使用
简单断言:expect(1 + 1).to.be.equal(2)
下面介绍下各种数据断言的使用
相等或不想等
- to.be.equal
- to.be.not.equal
- to.be.deep.equal
布尔值
- to.be.ok
- to.not.be.ok
typeof
- to.be.a('string')
- to.be.an('object')
- to.be.an.instanceof(Foo)
include
- 数组包含 expect([1,2,3]).to.include(2)
- 字符串包含 expect('foobar').to.contain('foo')
- json包含 expect({foo: 'bar'}).to.include.keys('foo')
empty
.to.be.empty
- expect([]).to.be.empty
- expect({}).to.be.empty
- expect('').to.be.empty
match
正则匹配
- expect('foobar').to.match(/^foo/)
命令行
执行测试文件
- 单个测试文件
mocha 1.test.js
复制代码
- 多个测试文件
mocha 1.test.js 2.test.js
复制代码
- 通配符匹配测试文件
mocha 'test/**/*.js'
复制代码
默认测试文件路径
默认测试文件夹为test目录
默认测试文件路径的问题
mocha默认只执行test目录下的测试用例,而子目录等一概不执行
解决默认测试文件路径的问题
- 命令行解决
mocha --recursice
复制代码
- 通配符的方式解决
mocha 'test/**/*.js'
复制代码
命令行参数
--help | -h
查看帮助
--reporter | -R
指定测试报告的格式,何为测试报告呢?就是执行mocha控制台输出的那串东西,对,它就是指定那玩意格式的
--reporters
指定测试报告的格式,就是上面👆那玩意,常用格式有doc,spec,markdown等
--recursive
执行test下的所有文件,包括子目录
--growl | -G
炫酷:桌面提示:测试完成
--watch | -w
监听测试脚本
--bail | -b
只要有一个测试用例未通过,就终止测试
--grep | -g
匹配测试用例名次(it第一个参数),举个🌰
mocha --grep "1 加 1"
复制代码
配置文件
原来还有配置文件这玩意,命令参数太长了比较难看,就配置到mocha.opts里面,放在test文件夹下面,举个🌰
--reporter spec
--recursive
--growl
复制代码
使用mochawesome生成HTML报告
控制台太丑,想要一份漂亮的测试报告,怎么办?
- step 1.
npm install mochawesome --save-dev
复制代码
- step 2.
../node_modules/.bin/mocha --reporter mochawesome
复制代码
执行mocha,你就可以收获一份美丽的测试报告了
Babel转码
测试脚本如果用ES6写的怎么办?
- 安装babel依赖
npm install @babel/register @babel/preset-env --save-dev
复制代码
- 配置.babelrc
{
"presets": ["@babel/preset-env"]
}
复制代码
- 修改命令行
mocha --require @babel/register 'test/**/*.js'
复制代码
到这里就完了,可是你可能会报错,错误信息有polyfill的话就请看【polyfill配置】
如果代理风格是typescript怎么办?
- step 1. 安装types
npm install @types/mocha @types/chai --save-dev
复制代码
- step 2. 修改命令行
mocha --require ts-node/register 'test/**/*.js'
复制代码
polyfill配置
polyfill配置的原因
Babel默认不会对Iterator,Grnerator,Promise,Map,Set等全局对象,以及一些全局对象的方法Object.assign转码
开始配置,还是两步:
- step 1.
npm install babel-polyfill --save
复制代码
- step 2.
import 'babel-polyfill'
复制代码
describe钩子
钩子有四个:before,after,beforeEach,afterEact
就不过多解释了,看着名字就可见一斑了,before是一组测试用例执行之前的钩子,beforeEach是每个测试用例执行之前的钩子,after同理
测试用例管理
测试用例太多了怎么办?只执行部分测试用例
- 骚操作1.only
<!--只运行带有only的测试用例-->
describe.only 或者 it.only('1 加 1')
复制代码
- 骚操作2.skip
<!--跳过部分测试用例-->
it.skip('1 加 1')
复制代码
异步测试
超时
每个测试用例最多执行2000毫秒
通过 -t重置超时
mocha -t 5000 timeout.test.js
复制代码
默认超过75毫秒会高亮显示,用--slow设置
mocha -t 5000 -s 1000 timeout.test.js
复制代码
mocha内置对Promise的支持
mocha支持Promise,可以在then里面执行断言