一般我們不管是做前端還是后端,為了提高代碼的質量,會選擇一種測試驅動開發(TDD)的辦法來寫代碼進行單元測試。Jest 是 Facebook 團隊開發的一款測試框架,為的是提高開發者的“開發體驗”。我們做單元測試的時候需要分解出一個個獨立的模塊,但是這樣做要寫很多的 mock 代碼(模擬的輔助函數),非常地繁瑣,這是行業的一個“痛點”。如果你和我一樣很懶,而且認同“懶惰即是美德”、“不要重復你自己(DRY)”這些原則的話,那么 Jest 測試框架就是你最好的選擇。如果你用過一些其他測試框架比如 Mocha 和 Jasmine 的話,看一下 Jest 文檔就馬上會用了。
Jest 特性
- 性能非常好,快速反饋
- 用法非常簡單,3 分鍾快速上手
- 容易安裝和運行,無需任何配置
- 自帶覆蓋率統計工具
- 可以在沙盒環境運行
- 自動 watch 你的代碼變動並運行測試
- 自動 mock 函數
- 其他測試框架都沒有的快照(snapshot)測試
- 非常簡單地就能測試異步代碼
- Vue,Angular,React 框架等等都能用
安裝
使用熟悉的 npm
npm install --save-dev jest
或者也可以試一下用 Yarn,總之二選一
yarn add --dev jest
然后在項目根目錄的package.json
配置里面加上這句
"scripts": {
"test": "jest"
}
快速上手的例子
引用一下 Jest 官網http://facebook.github.io/jest/docs/en/getting-started.html的例子。假設我們要寫一個加法函數,TDD開發流程第1步,先寫測試,注意名字要帶有test
:
// sum.test.js
// 導入代碼文件,test函數第1個參數是要顯示的文字信息,第2個回調函數里面寫測試
// expect期望 加法函數 toBe正確的結果
const sum = require('./sum')
test('1加2等於3', () => {
expect(sum(1, 2)).toBe(3)
})
TDD 開發流程第 2 步,我們用npm test
來運行測試,毫無疑問這個測試會失敗,因為要測試的函數根本不存在。這是非常正確的做法,因為我們如果要成功,先要學會失敗。
TDD 開發流程第 3 步,現在再來實現這個加法函數:
// sum.js
// 文件名很重要,你發現命名規律了嗎?
// 和測試放在同一個目錄,並且要導出
function sum(a, b) {
return a + b
}
module.exports = sum
然后可以再次運行npm test
來看測試結果:
PASS ./sum.test.js
✓ 1加2等於3 (5ms)
TDD 開發流程第 4 步,不斷強化你的測試,然后又強化你的代碼,重復這 4 個步驟。所謂道高一尺,魔高一丈,測試和代碼都會逐漸變得符合你的需求。
這篇只是 Jest 入門教程,只講了一個非常簡單的例子,人人都會寫,想要了解更多,可以去 Jest 官網http://facebook.github.io/jest查看文檔,全都是些一看就懂的例子,不會有特別深奧的東西,全都靠你熟能生巧。