天天看點

NodeJS測試架構Mocha一、測試架構:Mocha 二、斷言庫

一、測試架構:Mocha 

JavaScript測試架構之一,在浏覽器和Node環境都可以使用,相對比較新的測試架構,可以用來做 TDD(Test-Driven Development)或 BDD(Behavior Driven Development)風格的測試      

說明:

TDD:解決的是代碼級的驗證,但是測試代碼與需求的符合問題解決得不是很好,非技術人員、客戶看不懂代碼,無法評審測試是否符合需求。

BDD:理念是使用自然語言來描述功能,而且強調的是使用例子來說明需求功能。

1、全局變量洩露測試

Mocha 能夠發現那種不小心建立出來的全局變量洩露,如果建立了全局變量,它會在測試時抛出錯誤。如果想禁用全局洩露檢查,可以運作 mocha 指令時加上 --ignored-leaks 選項。

2、用 Mocha挂鈎定義設定和清理邏輯

BDD 接口 beforeEach()、afterEach()、before()和 after()接受回調,可以用來定義設定和清理邏輯。

3、示例

const memdb = require('..');
describe('memdb', () => {
    describe('.saveSync(doc)', () => {
        it('should save the document', () => {
      });
   });
});      

說明:

describe

塊:被稱為測試套件,表示一組相關的測試,它是一個函數,第一個參數是測試套件的名稱,第二個參數是一個實際執行的函數。

it

塊:被稱為測試用例,表示一個單獨的測試,是測試的最小機關,也是一個函數,第一個參數是測試用例的名字,第二個參數是一個實際執行的函數。

所有的測試用例(it塊)都應該含有一句或多句斷言,是編寫測試用例的關鍵,Mocha本身不包含斷言,斷言是由斷言庫來實作的,是以需要先引入斷言庫。

4、運作測試代碼

mocha預設運作test子目錄裡面的測試腳本,一般情況下,可以把測試腳本放在test目錄下,然後進入項目對應的目錄,直接執行mocha指令即可。

上面的指令隻會執行test第一層目錄下所有檔案,并不能執行嵌套目錄下的檔案。為了執行所有嵌套目錄下的檔案,使用 mocha --recursive 。

5、制作網頁版報告

全局安裝:

npm install -g --save-dev mochawesome      

執行指令:

mocha --reporter mochawesome      

說明:

使用上面的指令生成的報告中包含test目錄下所有測試檔案,若對某個測試檔案生成報告在指令後加XXX.js 。

出現的問題:Mocha裡面引用mochawesome失敗(ERROR: Unknown "reporter": mochawesome)

解決:全局安裝:npm install -g --save-dev mochawesome(之前沒全局)

二、斷言庫

可以了解為比較函數,也就是斷言函數是否和預期一緻,如果一緻則表示測試通過,如果不一緻表示測試失敗。目前比較受歡迎的斷言庫有 should.js, expect.js, chai。

1、should.js

它的設計初衷是搭配其他測試架構一起用,我們用的例子是編寫代碼測試一個定制的子產品。Should.js 跟其他架構的搭配很容易,因為它隻是給 Object.prototype 增加了一個 should屬性。這樣你就可以寫出表達能力更強的斷言,比如 user.role.should.equal('admin'),或者users.should.include('rick')。

示例:

var should = require('should');
const num1 = 3;
describe('示例', function() {
    it('3應該等于3',function() {
        num1.should.equal(3);
    });
    it('3不應該等于2',function() {
        num1.should.not.equal(2);
    });
});      

2、expect.js

應用廣泛,擁有很好的仿自然語言的方法,追求極簡的BDD風格斷言庫,基于should.js簡化。

3、chai

是個流行的斷言庫,同時支援should、expect 和 assert三種風格的斷言庫。看起來像是 Node 自帶的 assertion 子產品,但它還有用來比較對象、數組和它們的屬性的工具。比如用 

typeof

比較類型,用 

property

檢查某個對象是否有我們想要的屬性。聲明式風格更冗長,但看起來更加通順。

示例:

//引入斷言庫chai
const chai = require('chai');
//使用它的assert斷言風格
const assert = chai.assert;
const foo = 'bar';
const tea = { flavors: ['char', 'earl grey', 'pg tips'] };
describe('示例',function() {
    it('1',function() {
        assert.typeOf(foo, 'string');
    });
    it('2',function() {
        assert.equal(foo, 'bar');
    });
    it('3',function() {
        assert.lengthOf(foo, 3);
    });
    it('4',function() {
        assert.property(tea, 'flavors');
    });
    it('5',function() {
        assert.lengthOf(tea.flavors, 3);
    });
});      

轉載于:https://www.cnblogs.com/sheng-yang/p/11328624.html

繼續閱讀