LabHub

ブログ

フロントエンドテスト 2025 — Vitest·Jest·Bun·Testing Library·Playwright·Storybook·MSW·ビジュアル回帰·AI (シーズン6 第11回)

한국어English日本語

プロローグ — なぜテストスタックが楽になったか

2024–2025に3つのことが変わってフロントエンドテストが簡素化された。

  1. Vitestが成熟し、Jestユーザーの多くを吸収。速度 + ESMネイティブ + Vite統合の複利。
  2. Playwrightが退屈 (良い意味で) に — 動く、クロスブラウザ、CI、良ツール。
  3. AI生成テストがギミックから「まともな初稿」へ — Cursor、Continue、Claude Codeがまともなテストを書ける。

本稿は2026年に何を実際に書くか、どの比率で。


1章. テストピラミッドは今も正しい

1:10:100のピラミッド (e2e : 統合 : ユニット) は今も正しい形。変わったもの:

アンチパターン: 逆ピラミッド (多くのe2e、少ないユニット) — 脆弱、遅い、高価。


2章. ユニットテスト — Vitestが答え

Vitestが勝った理由

最小セットアップ

// vitest.config.ts
import { defineConfig } from 'vitest/config'
import react from '@vitejs/plugin-react'
export default defineConfig({
  plugins: [react()],
  test: {
    globals: true,
    environment: 'happy-dom',
    setupFiles: ['./test/setup.ts'],
  },
})

Jestで今もOKな時

Bun test


3章. コンポーネントテスト — Testing Library + Storybook 8

Testing Library

Storybook 8 (2024リリース) + Test Runner

パターン: ストーリーを先に書く、ストーリーをテストする。1ファイル3用途: ドキュメント、ユニットテスト、ビジュアル回帰。


4章. 統合テスト — MSWが糊

Mock Service Worker (MSW) がfetch呼び出しをネットワーク層で傍受。同じモックが動く:

// mocks/handlers.ts
import { http, HttpResponse } from 'msw'
export const handlers = [
  http.get('/api/users', () => HttpResponse.json([{ id: 1, name: 'Alice' }])),
]

利点: テストフィクスチャ = 開発フィクスチャ = ドキュメントフィクスチャ。単一の真実源。


5章. E2E — Playwrightがデフォルト

Playwrightの理由

Playwrightプラクティス

Cypress

Bunネイティブe2e


6章. ビジュアル回帰 — Chromatic, Percy, Loki

パターン: 各PRでビジュアル回帰がStorybookプレビューで実行。ボットコメントで視覚diff。

注意: 誤検知が多すぎる (小さなAA diff) → チームが無視 → 信号喪失。しきい値を早めに調整。


7章. A11yテスト — 各層に内蔵

目標: アクセシビリティ失敗がビルド失敗に、「誰かの仕事」ではなく。


8章. 契約テスト — Zod + 型付きAPI

tRPC/GraphQL/OpenAPIでは契約テストがほぼ自動。RESTでは:


9章. パフォーマンステスト

パフォーマンス予算をCIに結びつけてLCP回帰を出荷しない。


10章. AI拡張テスト

2026年に動く:

まだ動かない:

ルール: AIが初稿、人間がレビュー·引き締め。


11章. Flakiness — 敵

Flakyテストがチームの信頼を破壊。修正:

鍵メトリクス: flake rate < 1%。これ超でチームがCI失敗を無視する。


12章. カバレッジ — ツール、目標でなく


13章. 2026年理想スタック

ツール
ユニットVitest
コンポーネントTesting Library + Storybook 8 + Vitest
ネットワークモックMSW
ビジュアル回帰Chromatic
E2EPlaywright
A11yaxe-coreどこでも
契約Zod + OpenAPIコード生成
パフォーマンスLighthouse CI

12項目チェックリスト

  1. ユニットテストがPRで10秒未満?
  2. E2Eがシャーディング付きで3分未満?
  3. Flake rate が 1%未満?
  4. 各コンポーネントにStorybookストーリー?
  5. PRごとにビジュアル回帰?
  6. A11y失敗がビルド失敗?
  7. 全ネットワークモックにMSW?
  8. 契約テストが生成 (手書きでなく)?
  9. CIにパフォーマンス予算?
  10. ディレクトリごとカバレッジしきい値?
  11. テストランナーがIDE (VSCode/WebStorm) と統合?
  12. AIペアプログラミングワークフローにテスト執筆含まれる?

10アンチパターン

  1. 実装詳細のテスト (CSSクラスをチェック)。
  2. e2eが多すぎ — ピラミッド逆転。
  3. テストでsetTimeout
  4. ユニットテストで実API呼び出し。
  5. ビジュアル回帰でゼロ許容 — 微細ピクセル変更でトリガ。
  6. 目標としての100%カバレッジ — 無用なテストを生む。
  7. テスト間の共有可変状態。
  8. 大きなbeforeAllセットアップ — テスト順序依存。
  9. レビューなしスナップショット — グリーンパスが真の回帰を隠す。
  10. 「3回リトライで修正」したflakyテスト — 根本原因を隠す。

次回予告

シーズン6 第12回: フロントエンドCI/CD·デプロイ 2025 — GitHub Actions、Turborepo Remote Cache、Vercel、Netlify、Cloudflare、プレビュー環境、カナリア、機能フラグ、SLSA/SBOM。

— フロントエンドテスト編、完。

コメント

まだコメントはありません。

ログインするとコメントできます