javascript單元測試框架mocha 和 斷言庫 assert

陳杰就是我發表於2018-06-23

簡介

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: 失敗
複製程式碼

參考

nodejs.cn/api/assert.…

segmentfault.com/a/119000001…

相關文章