(23)被迫吃芒果的前端工程師 - Mocha - MongoDB 起手與連接資料庫

前言

前面我們已經快速瞭解了 Mocha 基本入門,因此接下來就要來開始撰寫 MongoDB 的部分,但是在開始撰寫 MongoDB 之前我們必須先做一些事情,也就是初始化的部分。

連接資料庫

首先一開始我們必須先將前面寫在 test_helper.js 中的東西刪除,而這邊我們一率都是使用 Mongoose 來撰寫,那麼在前面章節我們有說描述到,一開始要透過 Mongoose 連接資料庫的話,語法必定是以下

1
2
mongoose.connection.once('open', () => console.log('connected to database'));
mongoose.connection.on('error', (error) => console.error('database error', error));

那麼在 Mocha 中該如何撰寫呢?其實非常簡單,我們必須使用 before 的測試方法,因為我們必須在「全部測試開始之前」先連接資料庫,因此這一段就非常簡單

1
2
3
4
5
6
7
8
9
10
const { before } = require('mocha');
const mongoose = require('mongoose');
require('dotenv').config();

before((done) => {
mongoose.connect(process.env.DATABASE_URL);
mongoose.connection
.once('open', () => done())
.on('error', (error) => console.error('database error', error));
})

(process.env.DATABASE_URL 是 env 變數,在此就不多做介紹。)

ok,那接下來該怎麼執行測試呢?前面我們有新增一個指令是 test,你可以在終端機輸入 npm run test,基本上就可以執行成功。

但是你應該會發現都沒有任何提示訊息,所以我們可以稍微調整一下上方語法

1
2
3
4
5
6
7
8
9
10
11
12
13
const { before } = require('mocha');
const mongoose = require('mongoose');
require('dotenv').config();

before((done) => {
mongoose.connect(process.env.DATABASE_URL);
mongoose.connection
.once('open', () => {
console.log('connect mongoDB');
done()
})
.on('error', (error) => console.error('database error', error));
})

這樣當你執行 npm run test 就可以看到 connect mongoDB 的提示訊息

connect mongoDB

恭喜你已經完成第一個測試了,也就是連接資料庫。

那麼回頭講一下為什麼裡面多了一個 done,主要原因是 mongoose 在操作上都是非同步的,那麼身為前端工程師來講,相信一定非常清楚非同步的問題,因此在 Mocha 如果要解決非同步的問題的話,那就要使用 Mocha 所提供的 done 來解決,確保連接成功後才往下執行。

那這一章節我們先到這邊結束,後面也會深入玩一些方式 Mocha 怎麼測試 Express 的部分。