Mocha是最受歡迎的Node.js測試框架之一,它看起來很令人生畏,實際上卻很容易入門。
這個教程要講什麼?
本教程是關於Mocha基礎知識。
在本教程結束之前,我們將成功地使用Mocha編寫第一個測試。我們會了解如何設置Mocha,如何分組測試以及如何使用斷言庫。
明天我將發布第2部分,其重點是更高級的測試技術,以及將測試與實際的代碼整合在一起!
Mocha的文檔還不錯。不過,對於JavaScript新手來說,這文檔有點厚,不太好理解。我會帶大家玩一遍來自於Mocha文檔中的第一個例子。對於有些概念,我會比文檔做更多的分析和分解,以確保大家準確理解發生了什麼。
準備好了麼?我們開始吧!
全局安裝Mocha
通過執行如下命令,全局安裝Mocha:
$ npm install -g mocha
當全局安裝npm模塊時,不僅僅是將其用於當前項目,而是能像命令行工具一下訪問和使用該模塊。一旦Mocha被全局安裝了,我們就能夠在命令行上使用mocha關鍵字執行命令。
創建一個項目
接下來,我們將創建一個名為test的項目目錄。在test文件夾中,我們將創建一個名為test.js的文件。最後,我們通過執行npm init初始化我們的項目。
如果你不熟悉的話,npm init是一個以交互方式創建package.json文件的簡單方法。只需回答問題,然後敲回車鍵即可。這裡最重要的問題是 'test command:' - 回答'mocha'即可。這樣我們只需鍵入npm test就可以運行mocha。
完成後,應該有一個看起來像如下這樣的文件結構:
test|-- test.js|-- package.json
這裡package.json文件也應該包含如下的json:
"scripts": { "test": "mocha"},
有了上面這些東西後,我們就做好了測試的準備了!
編寫第一個測試
我們打算直接從Mocha文檔中複製一個測試,然後我會帶大家看看到底發生了什麼。將如下代碼複製到test.js文件中:
var assert = require('assert');describe('Array', function() { describe('indexOf() ✓ 當值不存在時,應該返回 -11 passing (9ms)leaf
我們的測試通過!太棒了。不過我們不知道為什麼...且聽下面分解。
記住,Mocha是一個測試框架。就是說它用於組合和執行測試。在編寫測試時,應該注意兩個基本的函數調用:**describe()**和**it()**。兩個都在上面的示例中用到了。
describe('string name', function(){ // 這裡可以嵌套更多的 describe(),或者寫測試 });
回想一下早前的例子。我們有一個名為Array的測試組,裡面有一個名為indexOf()_ ✓ 當值不存在時,應該返回 -11 passing (9ms)leaf
結果一行一行分解就是:
放在一起
現在我們已經有了所有的東西,所以可以把它放在一起了。這是我們的原始測試,用注釋解釋了每一行:
// Require 內置的 'assertion' 庫var assert = require('assert');// 創建一組關於數組的測試describe('Array', function() { // 在 Array 組內,為 indexOf 創建一組測試 describe('#indexOf()', function() { // 一個字符串解釋我們在測試什麼 it('當值不存在時,應該返回 -1', function(){ // 實際測試: -1 應該等於 indexOf(...) assert.equal(-1, [1,2,3].indexOf(4)); }); });});javascript
檢驗學習情況
好了,該檢驗一下學習情況了。不要滾動查看答案,請編寫如下測試:
不要向下滾動,直到讓兩個測試通過!
不要向下滾動,直到讓兩個測試通過!
不要向下滾動,直到讓兩個測試通過!
測試答案
大家能做到嗎?如果沒有,沒關係!如果做到了,幹的不錯!下面我們看看注釋好的解決方案:
// require 內置的 'assertion' 庫var assert = require('assert');// 創建一個名為Math的測試套件(組)describe('Math', function() { // 第一個測試:一個字符串解釋我們在測試什麼 it('should test if 3*3 = 9', function(){ // 實際測試: 3*3 應該等於 9 assert.equal(9, 3*3); }); // 第二個測試: 一個字符串解釋我們在測試什麼 it('should test if (3-4)*8 = -8', function(){ // 實際測試: (3-4)*8 應該等於 -8 assert.equal(-8, (3-4)*8); });});javascript
並且當執行npm test時:
Math √ should test if 3*3 = 9 √ should test if (3-4)*8 = -82 passing (13ms)lsl
你做到了。
幹的不錯!現在(理想情況下)我們可以理解Mocha是什麼,如何設置它,如何分組測試以及如何使用斷言庫。
不過,如果無法實際測試代碼,那麼測試有什麼好處呢?
上就是今天的分享啦~
如果大家有問題或者想了解更多的
技術乾貨可以私信發送【微信】加朗妹兒微信喲~