Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

単体、結合、E2E テスト

S1 で一票を抜いたときに、集計関数が欠落を検出するだけでは十分ではありません。その情報が API を通ってブラウザに届き、画面が成功表示を止めるところまで確認する必要があります。

関数から画面まで

単体テストでは、入力コミットメントの計算、ジャーナルの読み取り、最終判定などを小さく切り出して確かめます。たとえば必須チェックを failed にしたときや、未知のチェックを混ぜたときに、完全成功を返さないことを検査します。

結合テストでは、部品をつないだときの取り違えを探します。投票と集計の状態遷移、API の要求・応答、保存した証拠の読み出し、Rust 検証サービスが返す状態などが対象です。公開 ZIP の許可リストも、生成側と配布側の両方で守られているかを確かめます。

CLI テストはブラウザを使わずに、セッション作成から投票、集計、検証までを実行します。Playwright の E2E テストは画面を操作し、同じ流れが利用者の操作として成立するかを確認します。アクセシビリティ検査には axe も使います。

軽い確認と、本物の証明を使う確認

日常の画面開発では mock の証明を使い、短時間で失敗を見つけます。一方、証明の入力・出力形式、Image ID、レシート検証の条件を変更した場合は、実際の production STARK 証明を通す必要があります。

コマンド確かめるもの
pnpm test:runリポジトリ全体の Vitest 単体・結合テスト
pnpm test:public公開ソースに含める範囲のテスト
pnpm test:cli:mockmock 証明を使う API の一連の流れ
pnpm test:e2e:mockブラウザから操作する一連の流れ
pnpm test:e2e:axe主な画面のアクセシビリティ
pnpm test:cli:real-dev実際の zkVM と開発用レシートを使う接続確認
pnpm test:cli:real-prod:s0S0 の production STARK 証明を使う確認
pnpm rust:zkvm:testRust のゲスト・共有契約のテスト
pnpm rust:verifier:testRust 検証サービスのテスト
pnpm formal:verifyLean の成果物と TypeScript テストの対応

開発用レシートが通ることは、production STARK 証明が検証できることの証拠にはなりません。テスト結果を見るときも、どの証明を使った実行かを区別します。

mock E2E でも、API を実際に通す

pnpm dev は Vite の開発サーバーとブラウザ内の mock API を使います。これに対して mock E2E は、production モードでビルドしたフロントエンドを静的 Hono サーバーから配信し、同じオリジンの API を呼び出します。画面だけでなく、HTTP と保存処理までつながる点が違います。

コマンドAPI・保存・証明
pnpm devブラウザ内 mock API。サーバーを使う場合はメモリ保存・同期処理・mock 証明
pnpm test:e2e:mock / pnpm test:e2e:axeHono API・ファイル保存・同期処理・mock 証明

保存方式と証明の組は、実行プロファイルに定義します。

E2E の起動スクリプトがブラウザとサーバーのプロファイルを揃えます。AWS 向けの pnpm build:ci では target-aws-async を選び、出力に mock API やテスト用の Turnstile 回避処理が混入していないことも検査します。

テストを継続して発見する

Vitest のテストは対象実装のそばに置き、Playwright のテストは tests/e2e/ に置きます。各ワークスペースとリポジトリ用ツールが担当するテストを明示し、未発見や重複実行を検査します。ブラウザ環境の jsdom を使うのは web ワークスペースだけです。

各ワークスペースの test は狭い確認に使えますが、全体の単体・結合テストはルートの pnpm test:run で実行します。CI ではこれに画面テスト、Rust、形式化、公開ソースの検査を組み合わせます。