前幾天在基礎API上面轉了一下 如今準備向原理源碼進軍了。有個小問題先要處理一下。就是研究一下如何把Vue3的單元測試跑起來。畢竟光讀代碼不運行是沒有靈魂的。歪歪一下中國的球迷是否是就是光看不踢。html
Vue3代碼是基於Jest進行測試,咱們先簡單看看什麼是jestvue
Jest 是Facebook的一個專門進行Javascript單元測試的工具,適合JS、NodeJS使用,具備零配置、內置代碼覆蓋率、強大的Mocks等特色。react
總之目前來說JS界Jest是一套比較成體系的測試工具。爲何這麼說呢好比拿之前的測試框架Mocha對比 他只是一個測試框架,若是你須要斷言還須要專門的斷言庫好比assert shoud expect等等 若是須要Mock還須要住啊們的庫來支持很不方便。不過Jest基本上能夠一次性搞定。npm
Jest測試代碼和邏輯代碼是聽從約定優於配置(convention over configuration)其實這個也是目前編程世界廣泛接受的原則。編程
Jest的測試代碼是基於如下約定json
其實這個規定相似於Maven對於測試代碼和邏輯代碼的約定只是test目錄換成了__tests__瀏覽器
下面咱們具體看一下Vue3源碼的目錄結構bash
其實邏輯代碼和測試代碼對應放置仍是很方便的 咱們再看看另一個reactive這個包框架
package.json文件中已經配置好了jest 函數
npm run test
複製代碼
咱們增長一個參數把覆蓋率跑出來
npx jest --coverage
複製代碼
實際上跑覆蓋率的時候是有錯的 咱們先不去管他 咱們先解析一下這個報告怎麼看,若是你們學過軟件工程會知道通常從理論上講覆蓋率包括
可是通常來說不一樣框架理解不同 在Jest這裏大概是這樣分解的
好比咱們看看vue的index這個測試
有兩種方法進行單獨測試
// 全局安裝
npm i jest -g
jest index
// 或者更更簡便一點
npx jest index
複製代碼
index.spec.ts
import { createApp } from '../src'
it('should support on-the-fly template compilation', () => {
const container = document.createElement('div')
const App = {
template: `{{ count }}`,
data() {
return {
count: 0
}
}
}
createApp().mount(App, container)
// 斷言
expect(container.innerHTML).toBe(`0`)
})
複製代碼
聲明中說爲了確認模板編譯能夠生效,這個就是一個簡單的數據綁定 最後 斷言也是看了一下 count是否爲 0 這個例子其實除了斷言部分其實直接拷貝到第一次講的那個html文件裏面是能夠運行的。
npx jest reactive --coverage
複製代碼
好了後面咱們就能夠開始向源碼進軍了