單元測試是用來對一個模塊、一個函數或者一個類來進行正確性檢驗的測試工做html
能夠理解爲對功能的基本驗證node
目前node中的測試框架,通常使用的是 mocha + 斷言庫 chainpm
安裝瀏覽器
npm install mocha -g
npm install mocha
npm install chai
複製代碼
describe 是一個 用例測試集, 他能夠進行嵌套app
describe('進行首頁的測試', function() {
// ....
})
複製代碼
一個it對應一個單元測試用例框架
it('測試接口xxx', function() {
// ....
})
複製代碼
only -- 在當前的父describe塊下,只執行該單元的測試異步
skip -- 在當前的父describe塊下,跳過該單元的測試async
describe('Array', function() {
describe.only('父describe塊下只執行該測試單元', () => {
it.skip('跳過的測試單元', () => { });
})
})
複製代碼
describe 和 it 均可以使用這兩個方法函數
測試集合上定義超時時間,會對這個測試集合中全部的測試用例和測試集合起做用單元測試
const sleep = time => new Promise(resolve => setTimeout(resolve, time))
it('timeout', async function () {
this.timeout(1000)
await sleep(3000)
expect(true).to.be.ok
})
複製代碼
提供了幾個函數,在特定的事件發生時被觸發
before()、after()、beforeEach()、afterEach()
同一個describe下的執行順序爲before、beforeEach、afterEach、after
before, after 執行一次
beforeEach,afterEach 每個測試用例都會觸發一次
before(() => console.info('首頁測試開始'))
after(() => console.info('首頁測試結束'))
beforeEach('check check check ', function() {
console.log('i am check')
})
複製代碼
chai有三種斷言風格,expect,should,assert, 個人項目使用的是 expect
列出幾個經常使用的方法
方法 | 含義 |
---|---|
equal | 相等(嚴格比較) |
not | 取反 |
include | 包含 |
expect('username').to.be.a('string')
expect(false).to.be.a('boolean')
expect(obj).to.have.property('foo')
複製代碼
項目中的大部分函數爲異步的,這個須要藉助 done 來處理
it(`處理異步請求`, (done) => {
// ...
done()
})
複製代碼
異步函數在函數內部手動調用done()表示測試成功,done(err)表示測試出錯
async await 能夠不使用done
it('更新用戶對於文章的態度', async () => {
const result = await updateAttitude({ articleId: 123, userId: 131, status: 0})
expect(result).to.be.a('number')
})
複製代碼
最多見的接口測試
it('獲取某一個頻道下的全部文章列表', async function () {
const result = await chai
.request(app)
.get('/articles/3/1')
.then((res) => {
return res.body
})
expect(result).to.have.property('data')
})
複製代碼
生成測試報告使用的是 mochawesome 模塊
"mocha:report": "mocha --reporter mochawesome"
複製代碼
會自動在項目建立 一個 mochawesome-report 目錄,
簡單來講,就是判斷你的測試用例對於函數的覆蓋程度
npm install -g istanbul
複製代碼
生成測試率覆蓋報告
istanbul cover _mocha -- -R spec
複製代碼
注: 這裏是 _mocha 不要丟掉這下劃線
會在項目中自動建立 coverage 文件夾
在瀏覽器中打開
open coverage/lcov-report/index.html
複製代碼
接口是確定須要編寫測試用例的,至因而否須要對函數作處理,我的感受能夠對重要的函數進行測試