Vue 2 項目中快速集成 Jest 單元測試(超詳細教程)

在 Vue 項目中編寫單元測試,是提升代碼質量和維護性的關鍵一步。本文將帶你從零開始,在一個 Vue 2 + Vue CLI 項目中集成 Jest 作為單元測試框架,并運行第一個測試用例。

? 適用于 Vue 2 項目(如你使用的是 vue-cli-service)

? 基于 @vue/cli-plugin-unit-jest 官方插件

? 包含完整命令、配置說明和測試示例

一、安裝 Jest 及相關依賴
如果你的項目已經使用 Vue CLI 創建,只需添加官方的 Jest 插件即可。

1. 安裝 Jest 插件

vue add @vue/unit-jest


?? 注意:這個命令會自動安裝 @vue/cli-plugin-unit-jest 和 @vue/test-utils 等必要依賴。

二、檢查 package.json 腳本
確保你的 package.json 中有以下腳本:

"scripts": {"test:unit": "vue-cli-service test:unit","test": "jest","test:watch": "jest --watch","test:coverage": "jest --coverage"
}
  • npm run test:unit:使用 Vue CLI 運行測試(推薦)
  • npm run test:直接運行 Jest(適合 CI)
  • --watch:監聽文件變化
  • --coverage:生成測試覆蓋率報告

三、創建第一個測試文件
假設你有一個組件:src/components/HelloWorld.vue

1. 創建測試文件
在 tests/unit/ 目錄下創建 HelloWorld.spec.js:

// tests/unit/HelloWorld.spec.js
import { shallowMount } from '@vue/test-utils'
import HelloWorld from '@/components/HelloWorld.vue'describe('HelloWorld.vue', () => {it('renders props.msg when passed', () => {const msg = 'Welcome to Jest Testing'const wrapper = shallowMount(HelloWorld, {propsData: { msg }})expect(wrapper.text()).toMatch(msg)})
})

四、運行測試

1. 運行所有測試

npm run test:unit

或使用 Jest 命令:

npm run test

2. 查看測試覆蓋率

npm run test:coverage

運行后會在項目根目錄生成 coverage/ 文件夾,打開 coverage/lcov-report/index.html 可查看詳細報告。

五、Jest 配置(可選)

Jest 的配置默認由 Vue CLI 管理,你也可以在 package.json 中添加 jest 字段進行自定義:

"jest": {"testMatch": ["**/tests/unit/**/*.spec.(js|jsx|ts|tsx)"],"moduleFileExtensions": ["js","json","vue"],"transform": {"^.+\\.js$": "babel-jest",".*\\.(vue)$": "vue-jest"},"testEnvironment": "jsdom","setupFiles": ["<rootDir>/tests/setup.js"]
}

創建 setup.js(處理 DOM 操作)
有些組件會操作 document,在測試中可能報錯(如 querySelector is null),可創建 tests/setup.js:

// tests/setup.js
if (typeof document !== 'undefined') {if (!document.body) {document.body = document.createElement('body')}
}

并在 jest 配置中引入。

六、常見問題解決

問題解決方案
document is not defined?確保 testEnvironment: "jsdom"
Unexpected token 'export'?檢查 babel.config.js 是否正確
Test suite failed to run安裝 vue-jest@^3.0.7 和 babel-jest
TypeError: Cannot read property 'classList' of null?在操作 DOM 前加 if (el) 判斷

七、推薦最佳實踐

  • 測試文件命名:xxx.spec.js 或 xxx.test.js
  • 測試文件位置:src同級創建 tests文件夾 或者在測試的源碼同級目錄添加
  • 使用 shallowMount:避免渲染子組件
  • mock 接口請求:避免真實網絡調用
  • 覆蓋核心邏輯:props、events、computed、methods

八、遇到的問題

1.?[vue-jest]: Less are not currently compiled by vue-jest

這個報錯大模型回答受限于vue2,所以解決不掉,有解決辦法煩請共享下

2.?TypeError: Cannot read property 'createElement' of null

報錯信息

問題定位

耗費大量時間排查之后發現是因為代碼中在created()調用了getModelList()這個接口請求的方法導致報錯讀不到createElement和worker process得問題

原因分析

大模型回答如下

解決方案

mock接口請求并document.querySelector(不然會在調用此方法時報錯報錯)

總結

步驟?命令
安裝 Jestvue add @vue/unit-jest
運行測試?npm run test:unit
查看覆蓋率?npm run test:coverage
編寫測試?tests/unit/*.spec.js

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/94154.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/94154.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/94154.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PostgreSQL15——管理表空間

管理表空間一、基本概念二、創建表空間三、修改表空間四、刪除表空間一、基本概念 在 PostgreSQL 中&#xff0c;它是通過表空間&#xff08;Tablespaces&#xff09;來實現邏輯對象&#xff08;表、索引等&#xff09;與物理文件之間的映射。創建數據庫或者數據表&#xff08…

趣打印高級版--手機打印軟件!軟件支持多種不同的連接方式,打印神器有這一個就夠了!

軟件介紹&#xff08;文末獲取&#xff09;趣打印高級版是一款手機打印軟件。軟件支持五種不同的連接方式&#xff0c;每種都有穩定且快速的反應&#xff0c;用戶均可通過手機進行打印機的遠程使用和設置。軟件還支持上傳不同格式的文檔類型進行打印&#xff0c;方便快捷&#…

【開源框架】7 款流行的 Vue 3 后臺管理框架對比

以下是 7 個流行的 Vue 3 后臺管理框架在 Star 數&#xff08;截至 2025 年 8 月21日的 GitHub 最新數據&#xff09;、框架特點、基于的技術棧及開源協議四個方面的詳細對比&#xff1a; 1. Vue-Vben-Admin GitHub 地址&#xff1a;https://github.com/vbenjs/vue-vben-admin…

Datawhale工作流自動化平臺n8n入門教程(一):n8n簡介與平臺部署

前言 在數字化時代&#xff0c;重復性的工作任務正在消耗著我們大量的時間和精力。從數據同步到營銷自動化&#xff0c;從客戶服務到內容管理&#xff0c;這些瑣碎但必要的任務往往讓我們疲于應對。而工作流自動化工具的出現&#xff0c;為我們提供了一個優雅的解決方案。 今天…

SRE - 定位與能力

僅為個人知識總結與記錄 Site Reliability Engineer&#xff1a;站點可靠性工程&#xff08;SRE 軟件工程師 運維專家 可靠性專家&#xff09; 相對傳統的運維工程師&#xff0c;SER 注重開發&#xff0c;效率&#xff0c;追求自動化。對于 SRE 工程師&#xff0c;追究的就是…

StarRocks學習4-查詢優化與性能調優

? 1. 執行計劃分析&#xff08;EXPLAIN&#xff09; &#x1f31f; 作用&#xff1a; 用于查看 SQL 的執行路徑&#xff0c;判斷是否命中索引、物化視圖、Join 策略、并行度等。 &#x1f4cc; 常用命令&#xff1a; EXPLAIN SELECT ...; EXPLAIN VERBOSE SELECT ...;&#x1…

CentOS系統安裝Git全攻略

文章目錄? 方法一&#xff1a;使用 yum 或 dnf 包管理器安裝&#xff08;推薦&#xff09;1. 更新系統軟件包(非必須)[^1]2. 安裝 Git3. 驗證安裝? 方法二&#xff1a;從源碼編譯安裝&#xff08;適用于需要自定義版本或配置&#xff09;1. 安裝依賴包2. 下載 Git 源碼3. 編譯…

VR交通安全學習機-VR交通普法體驗館方案

VR交通安全學習機是一種基于虛擬現實技術的互動式教育設備&#xff0c;旨在通過虛擬環境模擬真實的交通場景&#xff0c;幫助用戶深入了解交通規則、交通信號、道路安全等知識&#xff0c;并通過沉浸式的體驗讓他們親身感受到不遵守交通規則的后果。無論是駕駛員、行人還是騎行…

算法題(188):團伙

審題&#xff1a; 本題需要我們通過解析所有人之間的關系&#xff0c;從而判斷出朋友團體的總個數并輸出 思路&#xff1a; 方法一&#xff1a;擴展域并查集 由于這里涉及對朋友/敵人等關系集合的頻繁操作&#xff0c;所以我們需要使用并查集來操作&#xff0c;但是普通的并查集…

C++開發/Qt開發:單例模式介紹與應用

單例模式是軟件設計模式中最簡單也是最常用的一種創建型設計模式。它的核心目標是確保一個類在整個應用程序生命周期中只有一個實例&#xff0c;并提供一個全局訪問點。筆者白話版理解&#xff1a;你創建了一個類&#xff0c;如果你希望這個類對象在工程中應用時只創建一次&…

Linux筆記---策略模式與日志

1. 設計模式設計模式是軟件開發中反復出現的問題的通用解決方案&#xff0c;它是一套套被反復使用、多數人知曉、經過分類編目的代碼設計經驗總結。設計模式并非具體的代碼實現&#xff0c;而是針對特定問題的抽象設計思路和方法論。它描述了在特定場景下&#xff0c;如何組織類…

關于多個el-input的自動聚焦,每輸入完一個el-input,自動聚焦到下一個

講解原理或者思路&#xff1a;如果你有多個el-input,想要實現每輸入完一個輸入框&#xff0c;然后自動聚焦到下一個輸入框&#xff0c;同理&#xff0c;如果每刪除一個輸入框的值&#xff0c;自動聚焦到上一個輸入框。條件那么首先要做的就是&#xff0c;設置條件&#xff0c;在…

AI 賦能教育變革:機遇、實踐與展望

引言說明教育在社會發展中的重要地位&#xff0c;以及傳統教育面臨的困境。引出 AI 技術為教育變革帶來新機遇&#xff0c;闡述研究其在教育中應用的價值。AI 為教育帶來的機遇個性化學習支持&#xff1a;講解 AI 通過分析學生學習數據&#xff0c;如答題情況、學習時間等&…

(一)八股(數據庫/MQ/緩存)

文章目錄 項目地址 一、數據庫 1.1 事務隔離級別 1. 事務的四大特性 2. Read Uncommited臟讀(未提交讀) 3. Read Commited幻讀(sql默認已提交讀) 4. Repeatable Read 5. Serializable 6. Snapshot(快照隔離) 7. 代碼開啟 8. For update和Repeatable Read的區別 1.2 各種鎖 …

STM32H750 CoreMark跑分測試

STM32H750 CoreMark跑分測試&#x1f50e;CoreMark跑分測試查詢網站&#xff1a;https://www.eembc.org/coremark/scores.php&#x1f4dc; CoreMark源碼&#xff1a;https://www.github.com/eembc/coremarkCoreMark移植和配置參考&#xff1a;https://community.st.com/t5/stm…

RabbitMQ如何確保消息發送和消息接收

消息發送確認 1 ConfirmCallback方法 ConfirmCallback 是一個回調接口&#xff0c;消息發送到 Broker 后觸發回調&#xff0c;確認消息是否到達 Broker 服務器&#xff0c;也就是只 確認是否正確到達 Exchange 中。 2 ReturnCallback方法 通過實現 ReturnCallback 接口&#xf…

Linux:進程間通信-管道

Linux&#xff1a;進程間通信-管道 前言&#xff1a;為什么需要進程間通信&#xff1f; 你有沒有想過&#xff0c;當你在電腦上同時打開瀏覽器、音樂播放器和文檔時&#xff0c;這些程序是如何協同工作的&#xff1f;比如&#xff0c;瀏覽器下載的文件&#xff0c;為什么能被文…

Jmeter + FFmpeg 直播壓測遇到的問題及解決方案

1、壓測機安裝FFmpeg&#xff0c;下載安裝步驟可見&#xff1a;https://zhuanlan.zhihu.com/p/692019886 2、Jmeter與FFmpeg位數要一致&#xff0c;不允許在32位的進程中運行一個64位的程序&#xff0c;反之亦然 3、OS進程取樣器&#xff08;Thread Group -> Add -> Sa…

安卓app、微信小程序等訪問多個api時等待提示調用與關閉問題

安卓app、微信小程序訪問webapi&#xff0c;將需要一時間&#xff0c;我們稱之為耗時操作&#xff0c;其它諸如密集型計算、訪問文件與設備等亦是如此。在這個期間我們應該跳出提示&#xff0c;告知用戶正在等待&#xff0c;并且很多時候&#xff0c;在等待時不允許用戶再對UI進…

一個狀態機如何啟動/停止另一個狀態機

一個狀態機如何啟動/停止另一個狀態機 這個過程主要依賴于動作列表&#xff08;Action List&#xff09; 中的特定動作項和狀態管理服務&#xff08;ARA::SM&#xff09;提供的API。 1. 通過動作列表&#xff08;Action List&#xff09;進行預配置控制 這是最常見的方式&#…