Sean's Note: Node.js 學習筆記(三) - 使用 Mocha, Expect 和 SuperTest 來做測試 Testing with Mocha, Expect and SuperTest

2017年4月30日 星期日

Node.js 學習筆記(三) - 使用 Mocha, Expect 和 SuperTest 來做測試 Testing with Mocha, Expect and SuperTest

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,有一個成功一個失敗。

圖1. npm test

Expect

Expect 是一套 Assertion Library。
npm install expect --save
有了 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
可以直接參考 GitHub 的文件範例。

沒有留言:

張貼留言