nodejs的測試框架用的最多的是mocha。mocha誕生於2011年,是如今最流行的測試框架之一,再瀏覽器和node環境中均可以使用。它支持多種nodejs的斷言庫,同時支持異步和同步的測試。node
ubuntu系統下安裝mocha:git
npm install mocha -g
案例:github
新建一個文件夾,文件夾下的目錄分配:web
lib:存放模塊代碼npm
test:存放單元測試代碼json
package.json:包描述文件ubuntu
編寫一個模塊(lib/min.js)。包含一個方法,這個方法輸出兩個數中比較小的一個數:瀏覽器
exports.min = (num1, num2) => { if(num1 =< num2) return num1 else return num2 }
給min.js編寫一個對應的單元測試文件(test/min.test.js):cookie
const min = require('../lib/min') describe('min模塊', () => { describe('min方法', () => { it('min should success', () => { min.min(5,6) }) }) })
在根目錄下執行mocha:(mocha命令默認會去test文件夾下尋找測試文件)框架
min模塊
min方法
✓ min should success
1 passing (5ms)
可是上面的測試有一個很大缺點,並無判斷運行以後能不能獲得正確結果5,這是由於測試沒有加上斷言庫的緣由,下面介紹斷言庫。
上面案例中只運行了代碼,並無檢測結果是不是預期的結果,若是要對結果加以判斷,還須要使用斷言庫:
使用should爲測試加上斷言:
安裝should:
sudo npm install should --save --registry=http://registry.npm.taobao.org
const min = require('../lib/min') const should = require('should') describe('min模塊', () => { describe('min方法', () => { it('min should success', () => { min.min(5,6).should.be.equal(5) }) }) })
此時再命令行再次輸入mocha:
min模塊
min方法
✓ min should success
1 passing (6ms)
和上面的結果同樣,可是意義卻不同了。
在lib中增長異步函數:
exports.asy = (bk) => { setTimeout(() => { bk(5) }, 10) }
在test文件夾中增長對應的測試文件:
const asy = require('../lib/asy') describe('asy模塊', () => { it('asy函數', done => { asy.asy(result => {
console.log(result) done() }) }) })
再用nodejs作web開發的時候,模擬http請求時是必不可少的,固然使用瀏覽器也能夠方便的實現http請求測試,可是並不快捷。supertest是一個很是好的適用於node的模擬http請求的庫。
方法:
.set() 用來設置數據
.expect() 用來斷言,如:.expect(200)
.send() 用來發送表單域數據,好比一個登陸模塊
.attach() 主要用來測試文件上傳,因爲send()只能上傳文本域,因此關於multipart-file的上傳須要經過附件來綁定。
持久化Cookie:
再不少業務中,須要用戶先登陸纔有權限執行操做,這個時候做爲http請求模擬,必需要能夠保存一些Cookie數據,也就是回話持久化,兩種思路:
1)再supertest中,能夠一個agent對象,這個對象的API跟直接在supertest上調用各類方法是同樣的,這個request再被屢次調用get和post以後,能夠一路把cookie都保存下來
2)經過.set(),再發起請求時,調用.set('Cookie', 'a cookie string')
let request = require('uspertest') let userCookie request.post('login') .end((err, res) => { userCookie = res.header['Cookie'] }) request.post(''createddd) .set('Cookie', userCookie) .end(...)
supertest使用的demo:地址