(22)被迫吃芒果的前端工程師 - Mocha - 入門

前言

那麼前面章節算是快速認識一下 Mocha 並且安裝 Mocha,但沒有真的開始介紹語法,因此這邊將會來介紹一些常見的語法。

Mocha 入門

首先我們先在 Express 專案底下建立一個 test 資料夾,並且建立一個 test_helper.js 的檔案,裡面基本上不用太多東西,因為我們要先認識一些基礎的 Mocha,其中這也是我們後續會需要使用的語法,首先是以下

  • before
  • beforeEach
  • describe
  • it
  • xit

以及 assert,但這邊要注意 assert 是 Node.js 本身所提供的斷言庫,主要原因是 Mocha 本身並沒有斷言庫,因此斷言庫就會使用 Node.js 本身的。

那麼在開始之前請你先將 package.json 打開來,然後新增一個 test 指令以下

1
2
3
4
5
6
7
8
{
...
"scripts": {
...
"test": "mocha",
},
...
}

新增完畢之後,我們回到 test_helper.js 中就可以準備開始了。

before

before 的意思是「準備測試執行之前」先執行裡面的內容,所以基本語法是這樣撰寫

1
2
3
before(() => {
console.log('before');
})

反過另來一個則是 after,但 after 則是全部測試完畢後才會執行裡面內容。

beforeEach

beforeEach 是「每次執行測試之前」,都先執行裡面的內容一次,這邊要注意與 before 不同,因為 before 只會執行一次,而 beforeEach 則是每一個測試執行時,都會先跑過一次,撰寫方式也與 before 相同

1
2
3
beforeEach(() => {
console.log('beforeEach');
})

另一個則是 afterEach,也就是每個測試完成之後就會執行裡面內容。

describe 與 it

describe 則是描述這個測試區塊在做什麼,而這個是一個群組概念,通常裡面會有很多測試在裡面,因此會搭配 it 居多,而 it 就是預計要測試的內容,撰寫方式如下

1
2
3
4
5
describe('第一條測試', () => {
it('這是一個測試 1 + 1 是不是等於 2', () => {
...
})
})

上面是 describeit 的基本用法,而 xit 則是一個很特別的測試方式,簡單來講就是當如果你有一個寫好的測試,但是你暫時不想要跑這一個測試時,可以使用 xit 忽略該測試,你可能會想說為什麼不乾脆刪除就好了?

主要原因是,有時候我們只是要暫時忽略該測試而不是真的要刪除,因為裡面可能包含了之前的邏輯在裡面,當你刪除的話,那麼我們之後要回頭尋找就會非常困難,因此就會建議使用 xit 忽略並保留當初撰寫的測試邏輯。

那這邊出現了一個疑惑,我們要如何驗證結果?這邊就要使用剛剛前面所講的 assert,意旨斷言結果是不是真的,例如:

1
2
3
4
5
6
describe('第一條測試', () => {
it('這是一個測試 1 + 1 是不是等於 2', () => {
const a = 1 + 1;
assert(a === 2);
})
})

這樣子撰寫後你就可以透過 npm run test 跑一次看結果,而這邊我也提供完整的範例確保你執行是正確的

1
2
3
4
5
6
7
8
const { describe, it } = require('mocha');

describe('第一條測試', () => {
it('這是一個測試 1 + 1 是不是等於 2', () => {
const a = 1 + 1;
assert(a === 2);
})
})

執行完畢之後你就可以看到一個綠色打勾,代表你測試成功

測試成功

基本上你只要掌握以上技巧,你就至少掌握了 6~7 成的測試基礎,剩下的章節我們就會從測試的角度去撰寫 Mongoose 唷。