整車上路實測 (端到端測試)
1. 什麼是 E2E 測試?— 模擬真實使用者
E2E 測試就像是聘請一位「機器人測試員」。
機器人測試員的工作流程
真的在背景啟動一個您的 Nuxt 網站
打開一個真實的瀏覽器(例如 Chrome)
依照我們寫好的劇本,去點擊連結、輸入文字、送出表單
最後回報整個流程是否順暢,結果是否如我們預期
它從使用者的角度,對整個應用程式的關鍵流程進行全面的驗證。
2. E2E 測試的關鍵工具
@nuxt/test-utils
再次為我們準備好了所有需要的工具:
setup()
在 E2E 測試開始前,這個函式會幫我們在背景啟動一個測試用的 Nuxt 伺服器。
createPage()
伺服器啟動後,這個函式會幫我們打開一個由 Playwright(一個強大的瀏覽器自動化工具)控制的瀏覽器分頁,並準備好讓我們下指令。
- • 支援多種瀏覽器(Chrome、Firefox、Safari)
- • 能模擬各種使用者互動(點擊、輸入、滾動等)
- • 提供豐富的斷言方法
- • 自動等待元素加載完成
3. 第一次上路實測
讓我們來寫一個簡單的測試劇本。
測試劇本
機器人要先訪問首頁,然後點擊「關於我們」的連結,最後確認頁面成功跳轉,並看到了「關於我們」的標題。
第一步:建立測試檔案
在 tests/
資料夾中建立 e2e/navigation.e2e.spec.ts
。
第二步:撰寫測試劇本
// tests/e2e/navigation.e2e.spec.ts
import { describe, test, expect } from 'vitest';
import { setup, createPage } from '@nuxt/test-utils/e2e';
describe('網站導航 E2E 測試', async () => {
// 在所有測試開始前,啟動 Nuxt 伺服器
// 這可能需要一點時間,因為它真的在背景建置並運行您的專案
await setup();
test('從首頁導航到關於我們頁面', async () => {
// 1. 開啟一個新的瀏覽器分頁,並前往首頁 ('/')
const page = await createPage('/');
// 2. 找到畫面上 role 為 'link' 且名稱為 'About' 的元素,並點擊它
// 這是 Playwright 的語法,非常接近真人的語意
await page.getByRole('link', { name: 'About' }).click();
// 3. 斷言:期望跳轉後的頁面上,role 為 'heading' 且名稱為 'About Page' 的元素是「可見的」
await expect(page.getByRole('heading', { name: 'About Page' })).toBeVisible();
});
});
執行測試:現在,當您執行 npm run test
時,您會看到 Vitest 啟動了您的 Nuxt 伺服器,並模擬了上述的瀏覽器操作來完成測試。
E2E 測試的優勢與挑戰
優勢
最接近真實使用者體驗
測試整個應用流程
能發現整合問題
提供高信心度
測試跨瀏覽器相容性
挑戰
執行時間較長
維護成本較高
測試環境複雜
可能出現不穩定性
錯誤定位較困難
今日總結與回顧
今天我們學會了 E2E 測試,它能從使用者的角度,確保我們整個應用程式的關鍵流程是通暢無誤的。
讓我們回顧一下這三天的測試之旅:
Day 26 (基礎):我們認識了單元測試(測零件)和端到端測試(測全車)的區別。
建立測試基礎觀念,安裝必要工具
Day 27 (單元測試):我們學會用 mountSuspended 來檢查單一元件的品質。
隔離測試元件功能,確保每個零件正常運作
Day 28 (E2E 測試):我們學會用 setup 和 createPage 來模擬真人,對整台車進行上路實測。
模擬真實使用者行為,驗證完整應用流程
完整的測試防護網
兩者相輔相成,共同構成了您專案的堅實防護網。單元測試確保每個元件的可靠性,E2E 測試確保整體用戶體驗的完整性。
單元測試特色
- • 執行速度快
- • 易於維護
- • 精確定位問題
- • 適合大量執行
E2E 測試特色
- • 接近真實場景
- • 測試完整流程
- • 高信心度驗證
- • 發現整合問題
🎉 恭喜您完成了「測試」這個重要但充滿挑戰的篇章!您的《人類補完計劃》又向前邁進了一大步!