使用mocha在Node.js和瀏覽器環境中單元測試
Mocha是一套JavaScript的測試框架(Test Framework),有Node.js和瀏覽器版本,可分別測試不同環境。
假設我們開發了一個JavaScript套件,我們希望可以在Node.js和不同瀏覽器上測試,可以用以下方法來達成。
1. 輸出至module或是window
在自己開發的JavaScript中,最後將程式依據環境輸出module或是全域變數,以下皆以js-md5為範例
;(function(root, undefined) { // ... if(typeof(module) != 'undefined') { module.exports = md5; } else if(root) { root.md5 = md5; } }(this));
2. 建立測試網頁
建立測試網頁,例如tests/index.html,內容需包含以下項目(要注意順序):
<!-- 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>
3. 實作測試內容
在test.js中實作測試內容,依照mocha的框架寫法去撰寫,例如:
describe('less than 64 bytes', function() { it('should be successful', function() { expect(md5('')).to.be('d41d8cd98f00b204e9800998ecf8427e'); }); });
完成後就可以開網頁看測試結果
4. 安裝node.js版本的mocha與相關套件
我將mocha安裝於全域,以後不需重複安裝
# sudo npm install mocha -g # npm install expect.js --save-dev
5. 建立node.js專用測試檔
例如建立node-test.js,加入以下項目
md5 = require('../src/md5.js'); expect = require('expect.js'); require('./test.js');
將test.js中需要用到的套件在node-test.js檔案中先行載入到全域變數,最後再載入test.js執行相同的測試項目。
之後就可以執行以下指令進行測試
# mocha node-test.js
或者在package.json中加入
"scripts": { "test": "mocha tests/node-test.js" }
就可以執行以下指令代替
# npm test
延伸閱讀