Mocha 是一套 JavaScript 的測試框架 (Test Framework),有 Node.js 和瀏覽器版本,可分別測試不同環境。

假設我們開發了一個 JavaScript 套件,我們希望可以在 Node.js 和不同瀏覽器上測試,可以用以下方法來達成。

輸出至 module 或是 window

在自己開發的 JavaScript 中,最後將程式依據環境輸出 module 或是全域變數,以下皆以 js-md5 為範例

1
2
3
4
5
6
7
8
;(function (root, undefined) {
// ...
if (typeof(module) !== 'undefined') {
module.exports = md5;
} else if(root) {
root.md5 = md5;
}
}(this));

建立測試網頁

建立測試網頁,例如 tests/index.html,內容需包含以下項目(要注意順序):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!-- mocha套件 start -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.1.0/mocha.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.1.0/mocha.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/expect.js/0.2.0/expect.min.js"></script>
<!-- mocha套件 end -->

<!-- mocha初始化 start -->
<div id="mocha"></div>
<script>
mocha.setup('bdd');
</script>
<!-- mocha初始化 end -->

<!-- 自己的套件與測試 start -->
<script src="../src/md5.js"></script>
<script src="test.js"></script>
<!-- 自己的套件與測試 end -->

<!-- 執行測試 start -->
<script>
mocha.checkLeaks();
mocha.run();
</script>

實作測試內容

在 test.js 中實作測試內容,依照 mocha 的框架寫法去撰寫,例如:

1
2
3
4
5
describe('less than 64 bytes', function () {
it('should be successful', function () {
expect(md5('')).to.be('d41d8cd98f00b204e9800998ecf8427e');
});
});

完成後就可以開網頁看測試結果
JavaScript Unit Tests

安裝 node.js 版本的 mocha 與相關套件

我將 mocha 安裝於全域,以後不需重複安裝

1
2
sudo npm install mocha -g
npm install expect.js --save-dev

建立 node.js 專用測試檔

例如建立 node-test.js,加入以下項目

1
2
3
md5 = require('../src/md5.js');
expect = require('expect.js');
require('./test.js');

將 test.js 中需要用到的套件在 node-test.js 檔案中先行載入到全域變數,最後再載入 test.js 執行相同的測試項目。

之後就可以執行以下指令進行測試

1
mocha node-test.js

或者在package.json中加入

1
2
3
"scripts": {
"test": "mocha tests/node-test.js"
}

就可以執行以下指令代替

1
npm test
Node.js Unit Tests

延伸閱讀

使用 jscoverage 計算 Node.js 程式覆蓋率
在 Github 上使用 Travis CI 進行持續整合 - Node.js
在 Github 上使用 Coveralls 顯示程式覆蓋率 - Node.js