簡介
mocha是一款功能豐富的javascript單元測試框架,它既可以執行在nodejs環境中,也可以執行在瀏覽器環境中。javascript是一門單執行緒語言,最顯著的特點就是有很多非同步執行。同步程式碼的測試比較簡單,直接判斷函式的返回值是否符合預期就行了,而非同步的函式,就需要測試框架支援回撥、promise或其他的方式來判斷測試結果的正確性了。mocha可以良好的支援javascript非同步的單元測試。mocha會序列地執行我們編寫的測試用例,可以在將未捕獲異常指向對應用例的同時,保證輸出靈活準確的測試結果報告。
安裝
npm install mocha -g簡單的例子
var assert = require('assert')
describe('Array', function() {
describe('#indexOf()', function() {
it('should return -1 when the value is not present', function() {
assert.equal(-1, [1, 2, 3].indexOf(4))
})
})
})
複製程式碼
在終端中執行後如出現下面結果則為通過:
Array
#indexOf()
✓ should return -1 when the value is not present
1 passing (9ms)
複製程式碼
一個簡單的測試包含describe和it,describe宣告瞭一個TestSuit(測試集合) ,而且測試集合可以巢狀管理,而it宣告定義了一個具體的測試用例。
assert為斷言庫,除了assert還有如下幾種,Mocha允許你使用你喜歡的斷言庫
- should.js - BDD風格貫穿始終
- expect.js - expect() 風格的斷言
- chai - expect()、assert()和 should風格的斷言
- better-assert - C風格的自文件化的assert()
- unexpected - “可擴充套件的BDD斷言工具”
assert斷言庫
首先先引入斷言assert模組
var assert = require('assert');
複製程式碼
1.assert(value[, message]) assert.ok() 的別名。
- value 要檢查是否為真的值。
- message |
assert.ok(true); 同 assert(true)
// 測試通過。
assert.ok(false, '不是真值'); 同 assert(false, '不是真值')
// 丟擲 AssertionError: 不是真值
複製程式碼
2.assert.equal(actual, expected[, message])
assert.equal(1, 1);
// OK, 1 == 1
assert.equal(1, '1');
// OK, 1 == '1'
assert.equal(1, 2);
// AssertionError: 1 == 2
assert.equal({ a: { b: 1 } }, { a: { b: 1 } });
// AssertionError: { a: { b: 1 } } == { a: { b: 1 } }
複製程式碼
3.assert.fail([message])
- message | 預設為 'Failed'。
丟擲 AssertionError,並帶上提供的錯誤資訊或預設的錯誤資訊。 如果 message 引數是 Error 的例項,則會丟擲它而不是 AssertionError。
const assert = require('assert').strict;
assert.fail();
// 丟擲 AssertionError [ERR_ASSERTION]: Failed
assert.fail('失敗');
// 丟擲 AssertionError [ERR_ASSERTION]: 失敗
assert.fail(new TypeError('失敗'));
// 丟擲 TypeError: 失敗
複製程式碼