1. 單元測試
1.1 TDD 測試驅動開發
- TDD指的是Test Drive Development,很明顯的意思是測試驅動開發,也就是説我們可以從測試的角度來檢驗整個項目。
- 大概的流程是先針對每個功能點抽象出接口代碼,然後編寫單元測試代碼,接下來實現接口,運行單元測試代碼,循環此過程,直到整個單元測試都通過。
1.2 BDD 行為驅動開發
- BDD指的是Behavior Drive Development,也就是行為驅動開發。
- 在TDD中,我們並不能完全保證根據設計所編寫的測試就是用户所期望的功能。
- BDD將這一部分簡單和自然化,用自然語言來描述,讓開發、測試、BA以及客户都能在這個基礎上達成一致。
2. 測試工具
- 單元測試框架 mocha http://mochajs.org
- 斷言 chai http:/chaijs.com
- 代理HTTP請求 supertest https://npmjs.com/package/supertest
2.1 使用 mocha 完成一個簡單的測試用例
2.1.1 安裝
Chai允許開發人員選擇最舒適的接口進行測試語句的編寫。具有鏈式功能的BDD風格提供了富有表現力的語言和可讀風格,如expect或者should;而TDD斷言風格則提供了更為經典的感覺,如assert。
npm i mocha chai -S -D
2.1.2 頁面結構
2.1.3 add.js
function add(x, y) {
return x + y;
}
module.exports = add;
2.1.4 在測試文件mocha.js中先引入add方法和chai的expect方法
var add=require('../src/add.js');
var expect=require('chai').expect;
2.1.5 然後書寫測試腳本
describe('add_test1',function(){
it('1+1=2',function(){
expect(add(1,1)).to.be.equal(2);
});
it('1+1!=3',function(){
expect(add(1,1)).to.be.not.equal(3);
})
})
上面這段代碼,就是測試腳本,它可以獨立執行。測試腳本里面應該包括一個或多個describe塊,每個describe塊應該包括一個或多個it塊。
describe塊稱為"測試套件",表示一組相關的測試。它是一個函數,第一個參數是測試套件的名稱(“add_test1”),第二個參數是一個實際執行的函數。
it塊稱為"測試用例",表示一個單獨的測試,是測試的最小單位。它也是一個函數,第一個參數是測試用例的名稱(“1+1=2”),第二個參數是一個實際執行的函數
2.1.6 在package.json的scripts中添加mocha
scripts: {
"test": "mocha"
}
2.1.7 運行test文件
npm run mocha
運行了上述代碼後,會自動運行 /test/*.test.js 文件,得到如下結果
2.2 supertest
啓動一個node服務
//app.js
const express = require('express');
const app = express();
app.get('/', function (req, res) {
res.status(200).json({ name: '1234' });
});
app.listen(8080);
module.exports = app;
使用supertest模擬http請求
//test.js
const app = require('../src/app');
const request = require('supertest');
describe('app', function () {
it('/', function (done) {
request(app)
.get('/')
.expect('Content-Type', /json/)
.expect('Content-Length', "15")
.expect(200)
.end(done);
});
});