測試用例:mocha,should,istanbul
阿新 • • 發佈:2019-01-30
目標:
建立一個 lesson6 專案,在其中編寫程式碼。main.js: 其中有個 fibonacci 函式。
此函式的定義為 int fibonacci(int n)
- 當 n === 0 時,返回 0;n === 1時,返回 1;
- n > 1 時,返回 fibonacci(n) === fibonacci(n-1) + fibonacci(n-2)
,如 fibonacci(10) === 55
;
- n 不可大於10,否則拋錯,因為 Node.js 的計算效能沒那麼強。
- n 也不可小於 0,否則拋錯,因為沒意義。
- n 不為數字時,拋錯。
test/main.test.js: 對 main 函式進行測試,並使行覆蓋率和分支覆蓋率都達到 100%。
首先執行 npm init
建立 package.json
其次,建立main.js檔案,編寫 fibonacci 函式。
var fibonacci = function (n) {
if (n === 0) {
return 0;
}
if (n === 1) {
return 1;
}
return fibonacci(n-1) + fibonacci(n-2);
};
if (require.main === module) {
// 如果是直接執行 main.js,則進入此處
// 如果 main.js 被其他檔案 require,則此處不會執行。
var n = Number(process.argv[2]);
console.log('fibonacci(' + n + ') is', fibonacci(n));
}
執行 `$ node main.js 10`
![](http://i.imgur.com/zTevhDq.png)
接下來開始測試驅動開發,現在簡單的實現已經完成,那我們就對它進行一下簡單測試吧。
我們首先得把 main.js 裡面的 fibonacci 暴露出來。加一句
`exports.fibonacci = fibonacci`
// file: test/main.test.js
var main = require('../main');
var should = require('should');
describe('test/main.test.js', function () {
it('should equal 55 when n === 10', function () {
main.fibonacci(10).should.equal(55);
});
});
安裝全域性的 mocha: `$ npm install mocha -g``-g` 與 非`-g` 的區別,就是安裝位置的區別,g 是 global 的意思。如果不加的話,則安裝 mocha 在你的專案目錄下面;如果加了,則這個 mocha 是安裝在全域性的,如果 mocha 有可執行命令的話,那麼這個命令也會自動加入到你係統 $PATH 中的某個地方。 然後執行 `$ mocha` ![](http://i.imgur.com/5wLaqy1.png) 其中 `describe` 中的字串,用來描述你要測的主體是什麼;`it` 當中,描述具體的 case 內容。 引入的should模組,是一個斷言庫,而 mocha是測試框架。
比如測試一個數是不是大於3,則是 `(5).should.above(3)`;測試一個字串是否有著特定字首:`’foobar’.should.startWith(‘foo’)`; 這個時候再看一遍fibonacci 函式的幾個要求:
* 當 n === 0 時,返回 0;n === 1時,返回 1;
* n > 1 時,返回 `fibonacci(n) === fibonacci(n-1) + fibonacci(n-2)`,如 `fibonacci(10) === 55`;
* n 不可大於10,否則拋錯,因為 Node.js 的計算效能沒那麼強。
* n 也不可小於 0,否則拋錯,因為沒意義。
* n 不為數字時,拋錯。
根據上述要求,更新 main.test.js 如下:
var main = require('../main');
var should = require('should');
describe('test/main.test.js', function () {
it('should equal 0 when n === 0', function () {
main.fibonacci(0).should.equal(0);
});
it('should equal 1 when n === 1', function () {
main.fibonacci(1).should.equal(1);
});
it('should equal 55 when n === 10', function () {
main.fibonacci(10).should.equal(55);
});
it('should throw when n > 10', function () {
(function () {
main.fibonacci(11);
}).should.throw('n should <= 10');
});
it('should throw when n < 0', function () {
(function () {
main.fibonacci(-1);
}).should.throw('n should >= 0');
});
it('should throw when n isnt Number', function () {
(function () {
main.fibonacci('呵呵');
}).should.throw('n should be a Number');
});
});
這個時候再跑一下 $ mocha ,發現有三個 case 沒過
這個時候再更新 main.js 中的 fibonacci 函式,如下所示:
var fibonacci = function (n) {
if (typeof n !== 'number') {
throw new Error('n should be a Number');
}
if (n < 0) {
throw new Error('n should >= 0')
}
if (n > 10) {
throw new Error('n should <= 10');
}
if (n === 0) {
return 0;
}
if (n === 1) {
return 1;
}
return fibonacci(n-1) + fibonacci(n-2);
};
再執行一次 $ mocha ,則全部通過,這就是一種測試驅動開發。