Mocha
Mocha 是一套 JavaScript 的測試 framework。透過 npm 安裝:npm install mocha --save範例:
const math_utils = require ('./math_utils') it('add two numbers', () => { var res = math_utils.add(1, 2); if (res !== 3) { throw new Error(`Expected 3, but got ${res}.`); } }); it('add two numbers', () => { var res = math_utils.add(1, 2); if (res !== 4) { throw new Error(`Expected 4, but got ${res}.`); } });然後透過修改 package.json 來增加測試的腳本:
{ ... "scripts": { "test": "mocha **/**.test.js" }, ... }之後在 console 上執行:
npm test就可以看到 test 的結果如圖1,有一個成功一個失敗。
有了 Expect,我們就可以把上面的範例改寫成:
const expect = require ('expect') const math_utils = require ('./math_utils') it('add two numbers', () => { var res = math_utils.add(1, 2); expect(res).toBe(3); }); it('add two numbers', () => { var res = math_utils.add(1, 2); expect(res).toNotBe(4); });GitHub 的文件有更多的範例可以參考。
非同步的測試 Testing Asynchronous Code
const expect = require ('expect') const math_utils = require ('./math_utils') it('add two numbers', () => { var res = math_utils.addAsync(1, 2, (sum) => { expect(sum).toBe(4); });上面的測試是會成功 pass 的,因為 Mocha 跑完 addAsync 就結束了,根本沒有等 callback 回來,所以為了告訴 Mocha 等待,必須使用 done:
const expect = require ('expect') const math_utils = require ('./math_utils') it('add two numbers', (done) => { var res = math_utils.addAsync(1, 2, (sum) => { expect(sum).toBe(4); done(); });這樣就可以讓此測試預期是失敗的。
SuperTest
SuperTest 是一套用來測試 HTTP Request 的 Assertion Library。
npm install supertest --save