JavaScript-測試框架:Mocha

參考:http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.htmljavascript

1、安裝環境:工欲善其事,必先利其器!html

1. Node.js的安裝:java

(1)windons環境下:下載Node.js安裝包 -> 安裝;node

命令行窗口:node --version 檢查是否安裝 git

2. npm的安裝:npm

(1)npm installjson

(2)0node.js包管理工具npm安裝模塊後,沒法經過命令行執行命令,提示‘xxx’ 不是內部或外部命令的解決方法:通常出現這樣的問題緣由是npm安裝出現了問題,全局模塊目錄沒有被添加到系統環境變量。框架

(3)Windows用戶檢查下npm的目錄是否加入了系統變量PATH中,若是不存在須要手動添加,添加以後須要從新啓動CMD控制檯。函數

(4)nodejs模塊全局目錄環境變量,npm目錄可使用npm命令去查找:npm config get prefix工具

(5)安裝報錯:npm warn package.json @1.0.0 no repository field. 看字面意思大概是package.json裏缺乏repository字段,也就是說缺乏項目的倉庫字段。

{
    ...
    "repository": {
        "type": "git",
        "url": "http://baidu.com"
    },
    ...
}
但做爲測試項目或者練習用,只需在package.json裏面作以下配置便可:
{
    ...
    "private": true,
    ...
}
以這種方式把項目聲明爲私有。

3. mocha全局變量安裝:

(1)npm install --global mocha

 

2、mocha測試框架demo運行

1. 所謂測試框架,也就是「運行測試的工具」。

2. Mocha是Javascript測試框架之一,它的做用是運行測試腳本,所謂「測試腳本」,就是用來測試源代碼的腳本。

 

3、測試腳本的寫法

1.Mocha的做用是運行測試腳本,下面是一個加法模塊的代碼

// add.js
function add(x, y){
   return x + y;
}

modul.exports = add;

(1)要測試這個加法模塊是否正確,就要寫測試腳本。

(2)一般,測試腳本與所要測試的源碼腳本同名,可是後綴名爲.test.js(表示測試)或者.spec.js(表示規格)。好比,add.js的測試腳本名字就是:add.test.js。

// add.test.js
var add = require('./add.js');
var expect = require('chai').expect;

describe('加法函數的測試', function(){
    it('1加1應該等於2', function(){
       expect(add(1,1).to.be.equal(2));
    });
});

(3)上面這段代碼,就是測試腳本,能夠獨立運行。

(4)測試腳本應該包括一個或多個describe塊,每一個describe塊應該包括一個或多個it塊。

(5)describe塊稱爲「測試套件」(test suite),表示一組相關的測試。它是一個函數,第一個參數是測試套件的名稱(「加法函數的測試」),第二個參數是一個實際執行的函數。

(6)it塊稱爲「測試用例」(test case),表示一個單獨的測試,是測試的最小單位。它也是一個函數,第一個參數是測試用來的名稱(「1加1應該等於2」),第二個參數是一個實際執行的函數。

 

4、斷言庫的用法

expect(add(1,2).to.be.equal(2));//斷言

(1)所謂「斷言」,就是判斷源碼的實際執行結果與預期結果是否一致,若是不一致就拋出一個錯誤。上面這句斷言的意思是,調用add(1, 1),結果應該等於2。

(2)全部測試用來(it塊)都應該包含有一句或多句的斷言。它是編寫測試用例的關鍵。斷言功能由斷言庫來實現,Mocha自己不帶斷言庫,因此必須先引入斷言庫。

var expect = require('chai').expect;

(3)斷言庫有不少種,Mocha並不限制使用哪種。上面代碼引入的斷言庫是chai,而且指定使用它的expect斷言風格。

(4)expect斷言的優勢是很接近天然語言,下面是一些例子:

//相等或不想等
expect(4 + 5).to.be.equal(9);
expect(4 + 5).to.be.not.equal(10);
expect(foo).to.be.deep.equal({bar: 'baz'});

//布爾值爲true
expect('everything').to.be.ok;
expect(false).to.not.be.ok;

//typeof
expect('test').to.be.a('string');
expect({foo: 'bar'}).to.be.an('object');
expect(foo).to.be.an.instanceof(Foo);

//include
expect([1,2,3]).to.include(2);
expect('foobar').to.contain('foo');
expect({foo: 'bar', hello: 'universe'}).to.include.kes('foo');

//empty
expect([]).to.be.empty;
expect('').to.be.empty;
expect({}).to.be.empty;

//match
expect('foobar').to.be.match(/^foo/);

(5)基本上,expect斷言的寫法都是同樣的。頭部是expect方法,尾部是斷言的方法,好比equal、a/an、ok、match等。二者之間是用to或者to.be連接;

(6)expect斷言不成立,就會拋出一個錯誤。事實上,只要不拋出錯誤,測試用例就算經過。

it('1加1應該等於2', function(){});

(7)上面的這個測試用例,內部沒有任何代碼,因爲沒有拋出錯誤,因此仍是經過;

5、Mocha的基本用法

有了測試腳本之後,就能夠用Mocha運行它。

$ mocha add.test.js

  加法函數的測試
    ✓ 1 加 1 應該等於 2

  1 passing (8ms)

(1)上面的運行結果表示,測試腳本經過了測試,一共只有一個測試用例,耗時是8毫秒。

(2)Mocha命令後面緊跟測試腳本的路徑和文件名,能夠指定多個測試腳本:

$ mocha file1 file2 file3

(3)Mocha默認運行test子目錄裏面的測試腳本。因此,通常會把測試腳本防止test目錄裏面,而後執行mocha就不須要參數了,進入子目錄,輸入mocha命令運行便可;

(4)打開test子目錄,會發現還有一個test/dir子目錄,裏面還有一個測試腳本multiple.test.js,並無獲得執行。由於Mocha默認只執行test子目錄下面的第一層的測試用例,不會執行更下層的用例。爲了改變這種行爲,就必須加上--recursive參數,這時test子目錄下面的全部測試用例(無論在那一層)都會執行。

相關文章
相關標籤/搜索