vue-testing-best-practices
使用 Vitest 和 Playwright 設置 Vue.js 測試
متاح أيضًا من: github.com/vuejs-ai
Vue.js 應用程式需要可靠的測試策略。本技能提供使用 Vitest 和 Vue Test Utils 進行單元測試的最佳實踐、元件測試模式、模擬策略,以及使用 Playwright 進行 E2E 測試。
تنزيل ZIP المهارة
رفع في Claude
اذهب إلى Settings → Capabilities → Skills → Upload skill
فعّل وابدأ الاستخدام
اختبرها
استخدام "vue-testing-best-practices". 如何為 Vue 3 專案設置 Vitest?
النتيجة المتوقعة:
- 安裝所需的套件:
- ```bash
- npm install -D vitest @vue/test-utils happy-dom
- ```
- 配置 vite.config.js:
- ```javascript
- export default defineConfig({
- plugins: [vue()],
- test: {
- globals: true,
- environment: 'happy-dom',
- setupFiles: ['./src/test/setup.js']
- }
- })
- ```
- 在 package.json 中添加測試腳本:
- ```json
- {"scripts": {"test": "vitest", "test:run": "vitest run"}}
- ```
استخدام "vue-testing-best-practices". 如何測試使用非同步元件的元件?
النتيجة المتوقعة:
- 使用 flushPromises 等待非同步元件:
- ```javascript
- import { mount, flushPromises } from '@vue/test-utils'
- import { defineAsyncComponent } from 'vue'
- const AsyncWidget = defineAsyncComponent(() =>
- import('./Widget.vue')
- )
- test('renders async component', async () => {
- const wrapper = mount(AsyncWidget)
- await flushPromises()
- expect(wrapper.text()).toContain('Widget Content')
- })
- ```
استخدام "vue-testing-best-practices". 如何為 Vue 登入流程撰寫 Playwright 測試?
النتيجة المتوقعة:
- 建立 Playwright 測試:
- ```typescript
- import { test, expect } from '@playwright/test'
- test('user can log in', async ({ page }) => {
- await page.goto('/login')
- await page.getByLabel('Email').fill('user@example.com')
- await page.getByLabel('Password').fill('password123')
- await page.getByRole('button', { name: 'Sign In' }).click()
- await expect(page).toHaveURL('/dashboard')
- })
- ```
التدقيق الأمني
آمنAll static findings are false positives. This is a documentation skill containing Vue.js testing best practices. The scanner misinterpreted markdown code examples and Vite configuration patterns as security threats. No malicious code, credential access, or data exfiltration patterns exist.
درجة الجودة
ماذا يمكنك بناءه
設置測試基礎設施
新的 Vue 3 專案需要測試設置。獲取安裝 Vitest、配置 vite.config.js,以及在 happy-dom 和 jsdom 環境之間選擇的逐步指導。
調試不穩定的非同步測試
元件測試由於時機問題而間歇性失敗。學習使用 flushPromises、nextTick 和非同步 await 來確保測試正確執行的模式。
實作 E2E 測試策略
Vue 應用程式需要跨瀏覽器 E2E 測試。配置 Playwright 與適當的瀏覽器支援、CI 整合,以及用於可維護測試的頁面物件模式。
جرّب هذه الموجهات
為 Vue 3 Counter 元件撰寫 Vitest 測試。該元件有一個計數值和遞增按鈕。使用 Vue Test Utils 的 mount 並測試點擊按鈕是否更新顯示的計數。
測試使用 defineAsyncComponent 載入子元件的 Vue 元件。子元件需要時間載入。展示如何使用 flushPromises 等待非同步元件渲染後再進行斷言。
建立一個 Vue 元件測試,其中元件使用 Pinia 商店來管理狀態。模擬商店以提供測試資料。展示如何在測試環境中設置 Pinia 實例。
為 Vue 登入頁面撰寫 Playwright E2E 測試。測試應該導航到 /login、填入電子郵件和密碼、提交表單,並驗證使用者被重定向到儀表板並顯示歡迎標題。
أفضل الممارسات
- 對於 Vue 3 專案使用 Vitest,因為它與 Vite 共用配置並提供原生 ESM 支援
- 通過公共介面而非內部實作細節來測試元件,以減少脆弱性
- 使用 flushPromises() 處理 Vue 元件中的非同步操作,包括動態導入和 Suspense
تجنب
- 避免將快照測試作為唯一的驗證方法,因為通過快照並不保證正確的行為
- 不要測試實作細節,如內部狀態或私有方法,這些會在重構時改變
- 避免透過 CSS 選擇器而緊密耦合測試到元件結構,應使用 data-testid 屬性
الأسئلة المتكررة
我應該使用 happy-dom 還是 jsdom 進行 Vue 測試?
如何測試使用生命週期鉤子的 composable?
mount 和 shallowMount 有什麼區別?
如何測試傳送的元件,如模態框?
何時應該使用 E2E 測試與元件測試?
如何在 Playwright 測試中處理驗證?
تفاصيل المطور
بنية الملفات
📄 teleport-testing-complexity.md
📄 testing-async-await-flushpromises.md
📄 testing-browser-vs-node-runners.md
📄 testing-component-blackbox-approach.md
📄 testing-composables-helper-wrapper.md
📄 testing-e2e-playwright-recommended.md
📄 testing-pinia-store-setup.md
📄 testing-suspense-async-components.md
📄 testing-vitest-recommended-for-vue.md
📄 SKILL.md