Mocha单元测试基础入门

817 阅读2分钟

mocha是一个javascript的测试框架,chai是一个断言库,两者搭配使用更佳,所以合称“抹茶”(其实mocha是咖啡)。“抹茶”特点是: 简单,node和浏览器都可运行。 chai提供了三个断言方式 chai官网

截屏2021-09-07 下午4.03.54.png

  • BDD:Behavior Driven Development,行为驱动开发,注重测试逻辑
  • TDD:Test-Driven Development,测试驱动开发,注重输出结果

三种断言的简单用法

const { should, expect, assert } = require('chai')
const { add, mul } = require('./sum')

// should需要提前调用一下
should()
add(4, 5).should.equal(9)

expect(add(1, 4)).equal(5)
expect(mul(2, 3)).equal(6)

assert.equal(add(4, 6), 10)

Mocha

Mocha是一个功能丰富的JavaScript测试框架,可以运行在 node 和浏览器上,使异步测试变得简单而有趣。Mocha在运行测试用例过程中,当捕获到错误时,依旧能够灵活地运行精确的报告。mocha 默认的模式是 BDD

官网:mochajs.org/

安装

npm i mocha -D

// package.json
"scripts": {
    ...
    "test": "mocha test/mocha.js",
    ...
},
基本用法
describe('#match', () => {
  describe('add', () => {
    it('should return 5 when 2 + 3', () => {
      expect(add(2, 3), 5)
    })
    // it.only  只执行这条case
    // it.skip  跳过这条case
    it('should return 8 when 5 + 3', () => {
      expect(add(5, 3), 8)
    })
  })
  describe('mul', () => {
    it('should return 12 when 4 * 3', () => {
      expect(mul(4, 3), 12)
    })
  })
})

describe是可嵌套的,描述测试用例是否正确。

it(info, function)info为描述性说明。一个it对应一个单元测试用例。

expect(mul(4, 3), 12) chai断言的方式

输出结果

截屏2021-09-07 下午3.59.34.png

only()、skip()函数

describe 块和 it 块都允许调用 only()skip() 方法。

only() 方法表示在当前的父 describe 块下,只执行该单元的测试。

skip() 方法表示在当前的父 describe 块下,跳过不执行该单元的测试。

当在一个 describe 块下,同时存在 only()skip() 方法,则只执行 .only() 方法。

常用命令参数

--recursive 遍历子目录下的全部文件

Mocha 默认运行 /test 子目录里面的测试脚本。

Mocha默认只执行 /test 子目录下第一层的测试用例。

所以,应加上– recursive 参数,使全部子目录下的测试用例都能被执行。

mocha --recursive

-u tdd 执行 TDD 模式

mocha默认的模式是 BDD ,要想执行 TDDtest 时需要加上参数,如:

mocha -u tdd test.js

--watch, -w 监听脚本变化

--watch 参数用来监视指定的测试脚本。当脚本发生变化,就会自动运行mocha。

mocha --watch

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

mocha --bail

-timeout, -t 指定超时门槛

Mocha默认每个测试用例最多执行2000毫秒。如果2000毫秒后还没有执行完成,则报错。-t可执行超时门槛。

mocha -t 5000 test.js