如果你的 node 没有写单元测试,那可以跳过本文了。
在我们日常的单元测试中,常用的断言库有:
user.should.have.property('name', 'tz'); user.enabled.should.ok; expect(5).to.be.a('number'); expect(window).not.to.be.an(Image);
存在什么问题呢?
user.enabled.should.ok;
这句到底有没有执行? 还是只是取值? log
再跑一次,如果在 ci 上看日志就懵逼了。 require('should'); const expect = require('expect.js'); const assert = require('assert'); describe('test/showcase.test.js', () => { const arr = [ 1, 2, 3 ]; it('should.js', () => { arr[1].should.eql(10); }); it('expect.js', () => { expect(arr[1]).to.eql(10); }); it('assert', () => { // 用原生的话, 得到的提示更是一脸懵逼 assert(arr[1] === 10); }); }); // output: 1) test/showcase.test.js should.js: AssertionError: expected 2 to equal 10 ... 2) test/showcase.test.js expect.js: Error: expected 2 to sort of equal 10 ... 3) test/showcase.test.js assert: AssertionError: false == true ...
在egg 的开发中, 我们发现了不一样的它:
Power Assert in JavaScript.
Provides descriptive assertion messages through standard assert interface.
https://github.com/power-assert-js/power-assert
assert
即可。 const assert = require('power-assert'); describe('test/showcase.test.js', () => { const arr = [ 1, 2, 3 ]; it('power-assert', () => { assert(arr[1] === 10); }); }); // output: 4) test/showcase.test.js power-assert: AssertionError: # test/showcase.test.js:6 assert(arr[1] === 10) | | | | 2 false [1,2,3] [number] 10 => 10 [number] arr[1] => 2
在线尝试: https://azu.github.io/power-assert-demo/
安装依赖:
$ npm i mocha power-assert intelli-espower-loader --save-dev
配置 npm scripts
:
{ "scripts": { "test": "mocha -r intelli-espower-loader test/**/*.test.js", }, "devDependencies": { "power-assert": "^1.4.2", "intelli-espower-loader": "^1.0.1", } }
编写测试:
// 简单的 require const assert = require('power-assert'); describe('test/showcase.test.js', () => { const arr = [ 1, 2, 3 ]; it('power-assert', () => { // 完全兼容 node 原生的 assert API, 直接自由使用 assert(arr[1] === 10); }); });
执行测试:
$ npm test
intelli-espower-loader
,主要是把代码转译,参见作者的 slide . assert
了, 否则会遇到如下错误
require('assert')
改为 require('power-assert')
即可