javascript单元测试框架mocha 和 断言库 assert

2,904 阅读2分钟

简介

mocha是一款功能丰富的javascript单元测试框架,它既可以运行在nodejs环境中,也可以运行在浏览器环境中。javascript是一门单线程语言,最显著的特点就是有很多异步执行。同步代码的测试比较简单,直接判断函数的返回值是否符合预期就行了,而异步的函数,就需要测试框架支持回调、promise或其他的方式来判断测试结果的正确性了。mocha可以良好的支持javascript异步的单元测试。mocha会串行地执行我们编写的测试用例,可以在将未捕获异常指向对应用例的同时,保证输出灵活准确的测试结果报告。

安装

npm install mocha -g

简单的例子

var assert = require('assert')
    describe('Array', function() {
        describe('#indexOf()', function() {
            it('should return -1 when the value is not present', function() {
                assert.equal(-1, [1, 2, 3].indexOf(4))
            })
        })
    })

在终端中运行后如出现下面结果则为通过:

Array
    #indexOf()
      ✓ should return -1 when the value is not present


  1 passing (9ms)

一个简单的测试包含describe和it,describe声明了一个TestSuit(测试集合) ,而且测试集合可以嵌套管理,而it声明定义了一个具体的测试用例。

assert为断言库,除了assert还有如下几种,Mocha允许你使用你喜欢的断言库

assert断言库

首先先引入断言assert模块

var assert = require('assert');

1.assert(value[, message])    assert.ok() 的别名。

  • value 要检查是否为真的值。
  • message |
assert.ok(true); 同  assert(true)
// 测试通过。
assert.ok(false, '不是真值'); 同  assert(false, '不是真值')
// 抛出 AssertionError: 不是真值

2.assert.equal(actual, expected[, message])

assert.equal(1, 1);
// OK, 1 == 1
assert.equal(1, '1');
// OK, 1 == '1'

assert.equal(1, 2);
// AssertionError: 1 == 2
assert.equal({ a: { b: 1 } }, { a: { b: 1 } });
// AssertionError: { a: { b: 1 } } == { a: { b: 1 } }

3.assert.fail([message])

  • message | 默认为 'Failed'。

抛出 AssertionError,并带上提供的错误信息或默认的错误信息。 如果 message 参数是 Error 的实例,则会抛出它而不是 AssertionError。

const assert = require('assert').strict;

assert.fail();
// 抛出 AssertionError [ERR_ASSERTION]: Failed

assert.fail('失败');
// 抛出 AssertionError [ERR_ASSERTION]: 失败

assert.fail(new TypeError('失败'));
// 抛出 TypeError: 失败

参考

nodejs.cn/api/assert.…

segmentfault.com/a/119000001…