node项目集成mocha

·  阅读 151

安装

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控制台输出的那串东西,对,它就是指定那玩意格式的

此为spec格式,查看各种格式见下一个命令

--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里面执行断言

分类:
阅读
标签:
分类:
阅读
标签:
收藏成功!
已添加到「」, 点击更改