NodeJs測試框架Mocha的安裝與使用

什麼是Mocha

Mocha是一個功能豐富的,運行在node.js上的JavaScript的測試框架。node

簡單測試

(1)在沒有引入測試框架前的測試代碼npm

//math.js
module.exports = {
    add : (...args) =>{
        return args.reduce((prev,curr)=>{
           return prev + curr +1;
        })
    },

    mul:(...args) =>{
        return args.reduce((prev,curr) =>{
            return prev * curr
        })
    }
}
//test.js
const {add ,mul} = require('./math');

if(add(2,3)===5){
    console.log('add(2,3)===5');
}else{
    console.log('add(2,3)!==5');
}

(2)引用node assert模塊的測試 上面的測試用例不具備語義化的特色,而經過斷言庫咱們能夠達到語義化測試用例的目的。 注:assert斷言在測試用例經過時控制檯沒有輸出信息,只有錯誤時纔會輸出json

const   assert = require('assert');
const {add ,mul} = require('./math');
assert.equal(add(2,3),6);

除了node的assert的模塊,也有一些第三方斷言庫可使用,例如Chai框架

安裝Mocha

Mocha自己是沒有斷言庫的,若是在測試用例中引入非node自帶的語言庫須要本身安裝。async

// 全局安裝  Install with npm globally
npm install --global mocha
// 本地安裝 as a development dependency for your project
npm install --save-dev mocha

使用Mocha

const {should,expect,assert} = require('chai');
const {add,nul} = require('./math');
describe('#math',()=>{
    describe('add',()=>{
        it('should return 5 when 2 + 3',() =>{
            expect(add(2,3),5);
        });
        
        it('should return -1 when 2 + -3',() =>{
            expect(add(2,-3),-1);
        })   
     })

     describe('mul',()=>{
        it('should return 6 when 2 * 3',() =>{
            expect(add(2,3),6);
        });
    });
})

運行Mocha,能夠經過在package.json中經過配置運行工具

{
      //其它配置...
       "scripts": {
        "test": "mocha mocha.js"
  }
}

而後執行「npm test」命令便可,須要注意的是mocha會檢查統一路徑下的全部文件,因此在在配置時能夠指定到特定的某個文件,以避免報錯。執行完以後會把結果(不管對錯和執行測試用例的數量還有執行總時長)顯示出來,以下圖所示: 性能

mocha其它功能實例測試

//只執行其中某條用例
it.only('should return 5 when 2 + 3',() =>{
            expect(add(2,3),5);
      });
//跳過某條不執行
it.skip('should return 5 when 2 + 3',() =>{
            expect(add(2,3),5);
 });

測試的覆蓋率

以上咱們系的例子代碼量都比較少,僅做爲示例,但若是代碼量龐大,咱們怎樣保證測試的覆蓋率呢,這就須要一些工具來幫咱們檢測,istanbul就是其中一個。ui

//安裝istanbul
npm install -g istanbul
{
      //其它配置...
    "scripts": {
    "test": "mocha mocha.js",
    "cover":"istanbul cover _mocha mocha.js"
  }
}

運行stanbul來檢測代碼的覆蓋率,能夠經過在package.json中經過來配置。而後經過「npm run cover」這條命令來調用,結果如圖所示: this

性能測試

使用了單元覆蓋率會使咱們的代碼在正確性上獲得必定保證,但在平常測試中,但好有一個問題要考慮,那就是性能。有一些輔助工具能夠幫咱們達到目的,benchmark就是其一。

npm i --save benchmark
//fn.js
module.exports = {
    num1:n =>parseInt(n),
    num2:n => Number(n)
}
//benchmark.js
const {num1,num2} = require('./fn');

const Benchmark = require('benchmark');
const suite = new Benchmark.Suite;

suite.add('parseInt',() =>{
    num1('123456');
}).add('Number',() =>{
     num2('123456')
}).on('cycle',event =>{
     console.log(String(event.target))
}).on('complete',function(){
    console.log('Faster is '+ this.filter('fastest').map('name'));
}).run({
    async:true
});

而後在命令行執行「node benchmark」,稍等幾秒便可看到結果,如圖所示:

相關文章
相關標籤/搜索