接續上一篇 [Day 21] 動手篇 - Please give me Mocha (1) ,基本需要的 Package 都安裝好。
設定測試時需要的 Server
test/config
新增 app.js
,檔案內容如下:const koa = require('koa');
const app = koa();
// 模擬 Client request 的發送
global.request = require('supertest').agent(app.listen());
const router = require('koa-router');
// Mocha 語法,在執行測試 "前" 做的準備動作
before((done) => {
// 這個判斷不是必要,這裡是為了確定測試時的狀態設定在 test
if (app.env !== 'test') {
let errorInfo = new Error('NODE_ENV isn\'t test.');
return done(errorInfo);
}
router.get('/', function *() {
this.body = 'Hello World!';
});
app.use(router());
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
return done();
});
});
第一個測試
test/controller
新增 first.spec.js
,檔案內容如下:describe('Controller and service\' s testing.', () => {
it('This is a Controller.', (done) => {
request.get('/').end((err, res) => {
if (err) return done(err); // 與 Server 相關錯誤
if (res.statusCode !== 200) return done(res); // 與 API 有關的錯誤
// 這裡取 response 的 text 而非 body 的原因是我前面給 body 是文字,非物件,因此這裡取 response 的 body 會得到 undefined
const result = res.text;
// 透過 shuldjs 來比對預期的結果
result.should.equal('Hello World!');
return done();
})
});
});
執行測試
env NODE_ENV=test mocha
env NODE_ENV=test ./node_modules/mocha/bin/mocha
測試結果