typo3-testing について
TYPO3 プロジェクトのテストを保守・拡張する開発者向けのスキルです。報告された不具合を失敗するテストにし、実際のレンダリング結果を確認する手順と、複数のテスト種別に関する資料を提供します。
主な機能
- 01不具合報告からテストを作成
- 02Fluid のレンダリング結果を検証
- 03テスト種別の選択ガイド
- 04runTests.sh の実行要件
- 05TYPO3 テストの参考資料
活用シーン
- 01修正前に報告済みの不具合を再現
- 02Fluid テンプレートの変更を検証
- 03既存テストスイートを評価
- 04DB やブラウザー動作に適したテストを選択
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ netresearch/ typo3-testing-skill --skill typo3-testingインストール後、Claude Code で/typo3-testingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/.php-cs-fixer.dist.phpAGENTS.mdbootstrap.phpcodecov.ymlFunctionalTests.xmlFunctionalTestsBootstrap.phpgithub-actions-e2e.ymlgithub-actions-tests.ymlinfection.json5Makefilephpat.neonassets/Build/playwright/.nvmrcpackage.jsonplaywright.config.tsassets/Build/playwright/tests/playwright/config.tsassets/Build/playwright/tests/playwright/accessibility/modules.spec.tsassets/Build/playwright/tests/playwright/e2e/backend-module.spec.tsassets/Build/playwright/tests/playwright/fixtures/setup-fixtures.tsassets/Build/playwright/tests/playwright/helper/login.setup.tsassets/Build/Scripts/runTests.shassets/docker/codeception.ymldocker-compose.ymlassets/example-tests/ExampleAcceptanceCest.phpExampleFunctionalTest.phpExampleUnitTest.phpassets/fixtures/be_users.csvpages.csvREADME.mdsys_category.csvtt_content.csv詳細
TYPO3 テストスキル
修正する前に、報告内容を失敗するテストにする
バグ報告は、まだ存在しないテストです。報告に記載された入力と期待される出力を使ってテストを書き、実行して、報告にある理由で失敗することを確認します。修正後に書いたテストで証明できるのは、コードがそのとおりに動作することだけです。
テンプレートを通じて生成される出力は、ユニットテストスイートではカバーされません。 ユニットテストスイートは PHP クラスを読み込みますが、Fluid テンプレートはレンダリングしません。そのため、テンプレートを編集してもテストスイートは成功したまま、ページは壊れていることがあります。このような変更は、レンダリングして検証してください。レンダリング経路を呼び出し、レンダリングされた文字列をアサートする機能テストを使います。
終了コードではなく、レンダリングされた文字列を確認してください。Fluid は解析できないインライン式でエラーを発生させず、その式をそのまま出力します。そのため、記述された属性内に {f:if(...)} が残ったマークアップがブラウザーに渡されます。「何も例外が発生しなかったこと」だけをアサートするテストは成功してしまいます。インライン式で別の呼び出しを入れ子にする必要がある場合は、タグ(<f:if>)として記述するか、PHP で値を計算して渡してください。
評価を最初に行うルール
既存のテストスイートを強化する場合(一から作成する場合ではありません)は、まず次を実行します。
automated-assessment typo3-testing
より広範なカバレッジを得るには、
typo3-conformanceとenterprise-readinessをインストールしてください。
73 以上のチェックポイント(PHPUnit、PHPStan、runTests.sh、アーキテクチャ、ミューテーション、CI マトリックス、カバレッジ)からギャップレポートを生成します。
レポートをタスクリストとして使用します。 手動でテストを書く前に、機械的に解決できる失敗を解消してください。
適用対象
- 「テストを強化/改善/堅牢化する」、「カバレッジ/ミューテーションを増やす」
- 「エンタープライズグレード」、「テストで A+ を目指す」
適用対象外
- 一から作成する場合、特定のテストを書く場合、失敗をデバッグする場合
テスト種別の選択
| 種別 | 使用する場面 | 速度 |
|---|---|---|
| ユニット | 純粋なロジック、DB なし、バリデーター、ユーティリティ | 高速 |
| 機能 | DB 操作、リポジトリー、コントローラー | 中速 |
| アーキテクチャ | レイヤー制約、依存関係ルール(phpat) | 高速 |
| E2E(Playwright) | ユーザーワークフロー、ブラウザー、アクセシビリティ | 低速 |
| 統合 | HTTP クライアント、API モック、OAuth フロー | 中速 |
| ミューテーション | テスト品質、70% 以上のカバレッジ | CI/リリース |
runTests.sh - 必須
Build/Scripts/runTests.sh は必須です。実行可能であり、-s(スイート)と -p(PHP バージョン)を指定できるようにしてください。
Git フック
Netresearch のデフォルトは Build/captainhook.json です(composer.json の extra.captainhook.config で宣言されています)。次のコマンドで確認してください:ls Build/captainhook.json .git/hooks/pre-commit(references/captainhook-setup.md を参照)。
コマンド
# Setup (run in the extension root; paths are relative to this skill)
scripts/setup-testing.sh [-a] # -a: Codeception acceptance setup
scripts/validate-setup.sh
scripts/generate-test.sh <Type> <Class>
# Run (always via runTests.sh)
Build/Scripts/runTests.sh -s unit|functional|phpstan|cgl|mutation|ci
修正前にテストが失敗し、修正後に成功することを確認してください。バグ修正では、references/tdd-discipline.md に記載された厳格な TDD サイクルに従います。出力を貼り付けずに「テスト済み」「検証済み」と主張してはいけません。
スコア要件
ユニットテストは必須です(カバレッジ 70% 以上)。DB 操作には機能テストが必須です。アーキテクチャのポイントには phpat が必須 です。PHPStan のレベルは 10 です。
参考資料(references/ 内、拡張子 .md は省略)
unit-testing.md | functional-testing.md | functional-test-patterns.md | integration-testing.md | e2e-testing.md | accessibility-testing.md | ddev-testing.md | test-runners.md | architecture-testing.md | ci-debugging.md | ci-cd.md | quality-tools.md | mutation-testing.md | fuzz-testing.md | performance-testing.md | typo3-v14-final-classes.md | mock-validity.md | javascript-testing.md | captainhook-setup.md | enforcement-rules.md | event-dispatch-testing.md | crypto-testing.md | test-environment-guards.md | sonarcloud.md | typo3-ci-config-patterns.md | tdd-discipline.md | ci-workflows-meta-package.md | synthetic-secret-fixtures.md | release-workflow-validation.md | asset-templates-guide.md | backend-module-render-verification.md | backend-user-access-testing.md | framework-compat-gate.md | datahandler-silent-rewrites.md | live-instance-verification.md
コンテンツのトリガー
- TYPO3 のバージョン間で CI が失敗する →
ci-debugging.md - TSFE コンテキストを使用する機能テスト →
functional-testing.md - 依存関係のバージョン間でモックが失敗する →
mock-validity.md - 画像/拡張機能のテスト、
Environment::initialize、NormalizedParamsの TypeError、backupGlobals→test-environment-guards.md - try/catch を使ったイベントディスパッチャーのテスト →
event-dispatch-testing.md - メタパッケージ、typo3-ci-workflows、no-plugins →
ci-workflows-meta-package.md - 偽のシークレット、push-protection、cs-fixer の連結 →
synthetic-secret-fixtures.md - タグを誤って付けた、タグ付け前に検証する →
release-workflow-validation.md - バックエンドモジュールの 500 エラー/誤った ViewHelper 名前空間/暴走するキャンバス →
backend-module-render-verification.md - 管理者以外の BE ユーザーのアクセス制御 →
backend-user-access-testing.md - DataHandler を介したコードの書き込み(エージェントツール、インポーター、API エンドポイント)で、エラーがないまま値が破棄または書き換えられる →
datahandler-silent-rewrites.md - TYPO3 と一緒にパッケージをインストールできない →
framework-compat-gate.md - 稼働中のインスタンスで変更を確認する(バックエンドモジュール、コンテンツ要素のプレビュー、フロントエンドページ、受け入れテストのスクリーンショット)、sudo モードのダイアログ、スクリーンショットでモジュールのコンテンツが途切れる →
live-instance-verification.md - happy-dom を使った Vitest、fast-check、レガシー jQuery プラグインのテスト、単体テストまたは E2E 仕様 →
javascript-testing.md、Stryker →mutation-testing.md - Playwright を使わない/EXT:form または JavaScript で動作するページを場当たり的にブラウザーで確認する →
e2e-testing.md(CDP による代替)