单元测试
本文将以mocha
测试框架为例,单元测试程序也将使用ES2015来写。
首先执行以下命令安装mocha
:
$ npm i -g mocha
安装完成后可执行以下命令验证是否安装成功:
$ mocha --version
2.3.4
通过阅读babel
的官方文档(访问http://babeljs.io/docs/setup/#mocha )可知,为了让Node.js中的require()
函数能直接载入ES2015程序,需要依赖babel-core
模块,执行以下命令安装:
$ npm i babel-core mocha --save-dev
运行mocha
命令的时候,需要增加额外的参数--compilers js:babel-core/register
让其使用babel
来载入JavaScript程序。为了方便,我们可以修改package.json
文件,增加以下内容:
{
"scripts": {
"test": "mocha --compilers js:babel-core/register"
}
}
说明:我们通过npm init
命令生成package.json
文件时,已经自动生成了test
命令,其默认值为echo \"Error: no test specified\" && exit 1
,直接将其改为mocha --compilers js:babel-core/register
即可。
以上准备工作完成后,便可以开始写单元测试程序了。新建文件test/test.js
:
import assert from 'assert';
import path from 'path';
import fs from 'fs';
import download from '../src';
import {randomFilename} from '../src/utils';
let readFile = f => fs.readFileSync(f).toString();
let getFileSize = f => fs.statSync(f).size;
describe('es2015_demo', () => {
it('复制本地文件成功', done => {
let source = __filename;
let target = randomFilename();
let onProgress = false;
download(source, target, (size, total) => {
onProgress = true;
assert.equal(size, total);
assert.equal(total, getFileSize(source));
}).then(filename => {
assert.equal(onProgress, true);
assert.equal(target, filename);
assert.equal(readFile(source), readFile(target));
done();
}).catch(err => {
throw err;
});
});
});
说明:本文只为了演示如何配置mocha
和编写单元测试程序,所以没有给download()
函数编写完整的单元测试,仅编写一个测试用例作为演示。
好了,现在执行$ npm test
命令看看:
$ npm test
> es2015_demo@1.0.0 test /private/tmp/es2015_demo
> mocha --compilers js:babel-core/register
es2015_demo
✓ 复制本地文件成功
1 passing (51ms)
至此,我们已经完成了使用ES2015编写模块,并使用mocha
来进行单元测试,下文将介绍如何通过babel
编译程序,并发布模块。