天天看点

mocha:入门笔记

0. mocha命令行参数

1. options

# 查看Mocha的所有命令行参数
--help, -h

# 用来指定测试报告的格式,默认是 spec 格式.
--reporter, -R
mocha
# 等同于
mocha --reporter spec

# 获得所有内置的报告格式
--reporters
# 第三方报告格式:mochawesome, 可以生成漂亮的HTML格式的报告
mocha --reporter mochawesome
# 命令行提示如下:
[mochawesome] Report JSON saved to /Users/fang/code/project/coverage/mochawesome.json
[mochawesome] Report JSON saved to /Users/fang/code/project/coverage/mochawesome.html
# 修改reporter的配置项,报告放在coverage/=目录下,文件名为:test-result,且不要生成html文件
mocha --reporter mochawesome --reporter-options reporterDir=./coverage,repotFilename=test-result,html=false

# 用来监视文件变化,如有变化则会自动运行 Mocha
--watch, -w

# 指定只要有一个测试用例没有通过,就停止执行后面的测试用例。这对 持续集成 很有用。
--bail, -b

# 只执行匹配的测试用例,匹配 it 块的第一个参数
--grep 或 -g # 参数用于“搜索匹配”测试用例的名称
--fgrep 或 -f # 参数用于“搜索包含”测试用例的名称
--invert 或 -i # 参数用于选择 --grep 和 --fgrep 结果相反的测试用例
# 例子
mocha --grep " 1 加 1" # 匹配 it 参数中有 1加 1
mocha --grep " 1 加 1" --invert # 反向匹配

# 递归
--recursive # 默认脚本放在test目录下,如果目录下有子目录,mocha默认是不执行的,所以需要使用 recursive 递归参数

# --require , -r # 在加载用户的接口或测试用例之前,使用module进行处理,这个还是很有用处的,如:
# test harnesses: 编译器工具,如:通过@babel/register工作的Babel或通过ts-node工作的TypeScript。【mocha可能有些语法不太能兼容,如,import/export就需要用@babel/register编译,async/await语言就需要用regenerator-runtime/runtime编译】
# 增强内置作用域或全局作用域的断言库(如should.js)
           

2. 特征

  • v7.1.0 开始可以用ESM写测试脚本文件,CommonJS也是可以的。
  • v8.0.0开始增加hooks,在某些测试中,你可能需要在每个测试用的before或者after使用一个hook。before / after / beforeAll /afterAll/ beforeEach / afterEach

3. API

  • describe(name,fn):定义一组测试
  • it(name,fn): 定义一项测试
describe('proxy', function() {
    it('proxy data 1', function(done) {
        this.timeout(1000);
        assert.ok(true, 'fail');
    });

    //嵌套
    describe('child1', function() {});

    //只测试某一组
    describe.only('testc1', function() {});

    //跳过某一组测试
    describe.skip('testc1', function() {});
});
           

only和skip可以用在describe上, 也可以用在it上.

4. hooks

  • before: 所有测试之前
  • after: 所有测试之后
  • beforeEach: 每个测试之前
  • afterEach: 每个测试之后

5. 断言

mocha 没有自己的断言库, 所以可以使用第三方的断言,比如 node内置的assert,以及第三方的chai等, 只要程序抛出一个错误, mocha 就会认为其测试不通过。

hook中的异步处理类似于it.

More

继续阅读