mcpField
T
testing

testing

github.com/cloudflareテスト・品質1.2k61 回インストール1 日前に更新
リポジトリ

testing について

testingは、Sandbox SDK固有のテスト規約をまとめたスキルです。コントリビューター向けに、単体テストとE2Eテストの選び方や、実行環境、コマンド、モック、テスト作成の指針を説明します。

主な機能

  1. 01単体テストとE2Eテストの使い分け
  2. 02テスト配置場所と実行環境の説明
  3. 03テスト実行・絞り込みコマンド
  4. 04モックとセッション分離のパターン
  5. 05テスト作成の規約

活用シーン

  1. 01変更内容に適したテストの選択
  2. 02Sandbox SDKテストの実行や絞り込み
  3. 03独立性のあるE2Eテストの作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/cloudflare/sandbox-sdk --skill testing

インストール後、Claude Code で/testingを入力して読み込まれたか確認します。

詳細

Sandbox SDK でのテスト

このスキルでは、プロジェクト固有のテスト規約を説明します。TDD の方法論については、superpowers:test-driven-development スキルを使用してください。

2 つのテストスイート

ユニットテスト

使用する場面:独立したロジック、クライアントの動作、サービスメソッド、ユーティリティをテストする場合。

場所:

  • SDK:packages/sandbox/tests/
  • コンテナ:packages/sandbox-container/tests/

ランタイム:

  • SDK のテストは @cloudflare/vitest-pool-workers を使用して Workers ランタイムで実行されます
  • コンテナのテストは Bun ランタイムで実行されます

コマンド:

npm test                              # All unit tests
npm test -w @cloudflare/sandbox       # SDK tests only
npm test -w @repo/sandbox-container   # Container tests only

モックのパターン:

  • SDK のテストではモックコンテナを使用します(Docker は不要です)
  • コンテナのテストでは外部依存関係(ファイルシステム、プロセス)をモックします
  • ロガーのモックには @repo/shared の createNoOpLogger() を使用します

既知の問題:vitest-pool-workers の workerd シャットダウンにより、SDK のユニットテストが終了時にハングすることがあります。テストの成功・失敗は正しく判定されます。ハングは見かけ上のものです。

E2E テスト

使用する場面:リクエストの一連の流れ、コンテナとの統合、実際の Docker の動作をテストする場合。

場所:tests/e2e/

ランタイム:実際の Cloudflare Workers と Docker コンテナ

コマンド:

npm run test:e2e                                                           # All E2E tests (vitest + browser)
npm run test:e2e:vitest -- -- tests/e2e/process-lifecycle-workflow.test.ts # Single vitest file
npm run test:e2e:vitest -- -- tests/e2e/git-clone-workflow.test.ts -t 'test name'  # Single vitest test
npm run test:e2e:browser                                                   # Browser tests only (Playwright)

注:テストを絞り込む場合は test:e2e:vitest を使用してください。test:e2e ラッパーは引数の引き渡しに対応していません。

主なパターン:

  • パフォーマンス向上のため、すべてのテストで 1 つのコンテナを共有します
  • テストを分離するため、テストごとに一意のセッションを使用します
  • テストはスレッドプールを使って並列実行されます
  • 設定:vitest.e2e.config.ts(ルート階層)

E2E テストの作成:

import { createTestSession } from './helpers';

describe('Feature X', () => {
  let session: TestSession;

  beforeEach(async () => {
    session = await createTestSession(); // Gets unique session
  });

  it('should do something', async () => {
    const result = await session.sandbox.exec('echo hello');
    expect(result.stdout).toBe('hello\n');
  });
});

どちらを使用するか

シナリオテスト種別
クライアントメソッドのロジックユニット
サービスのビジネスロジックユニット
リクエスト/レスポンスの処理ユニット
コマンド実行の一連の流れE2E
実際のファイルシステムを使ったファイル操作E2E
プロセスのライフサイクル(開始、停止、シグナル)E2E
ポート公開とプレビュー URLE2E
Git 操作E2E

テスト固有の規約

ファイル名:ユニットテスト、E2E テストのどちらも *.test.ts

テスト構成:

describe('ComponentName', () => {
  describe('methodName', () => {
    it('should do X when Y', async () => {
      // Arrange
      // Act
      // Assert
    });
  });
});

アサーション:vitest の expect() を使い、明確で具体的なアサーションを記述します

開発中のテスト実行

意味のあるコード変更を行った後は、次のコマンドを実行してください。

  1. npm run check - まず型エラーを検出します
  2. npm test - ユニットテストが通ることを確認します
  3. npm run test:e2e - コア機能に変更を加えた場合に実行します

ビルドへの信頼:モノレポのビルドシステムが依存関係を自動で処理します。E2E テストは常に最新のビルド済みコードに対して実行されるため、手動で再ビルドする必要はありません。

コメント