本文へ移動
BlackOps1.xは試験的なバージョンです。Production Readyは2.xを予定しています。Releases
BlackOps
Esc
navigateopen⌘Jpreview
このページの内容

Testing

変更リスクに合う検証層とnegative pathを選び、Applicationの確認順を設計する。

このGuideは、Operationをどのリスク層で検証するかを決めるためのApplication向け検証計画です。公開済みExperimental Stable 1.2.1ではOperation、HTTP、PostgreSQL Deferred、Journal、Outcome、Frontend Contract、Status/Outcome APIが利用できます。BlackOps Boardの手順はRepository Exampleとして別のApplication責務を含むため、Releasesを先に確認してください。

実行場所と準備

ApplicationのProject Rootで、対象Releaseと同じDependency、Build Artifact、Database Configurationを使います。Dockerを使う場合はApplicationのProject Rootからdocker compose run --rm app ...を実行します。Test Framework、Browser、Fixtureの選択とSecretの供給はApplicationが所有します。

5つの検証層

Layer 使う場面 実行入口 成功時に確認するもの
Operation 業務規則、Typed Value、Outcome、業務Rejected Applicationが選んだPHP Test Frameworkの通常のUnit/Integration Test OutcomeまたはRejectedの分類、Sensitive値が公開されないこと
HTTP Route、Binding、Value Validation、Status、Safe JSON 実HTTP Client(例: curl 200202401404422、Response Header、Operation ID
Deferred PostgreSQL Migration、202受付、Worker Attempt、Journal、Outcome php blackops worker:runまたはQuickstart and Skeleton acceptedからTerminal Event、Retry/Dead Letter、Typed Outcome
Frontend Generate、Drift、Strict Type、実HTTP Result build:compilefrontend:generatefrontend:checkpnpm test Fresh Tree、Typed Result、transportpoll_timeoutunexpected_response
Full-stack Browser Application-owned Authentication、BFF、Inline/Deferred UI、Accessibility ApplicationのPlaywright/Browser Test UI状態、Keyboard/Mobile、BFFの安全な境界

Unit TestだけでTransaction、Durability、Journal、Outcomeの永続化を保証したと判断しないでください。Deferredを変更したら、同じPostgreSQL SchemaへMigrationを適用し、実HTTPの202からWorker実行後のStatus/Journal/Outcomeまで確認します。

最小の実行順

Backendだけを検証する場合はProject Rootで次を実行します。

php blackops database:status
php blackops database:migrate --dry-run
php blackops database:migrate
php blackops build:compile
php blackops worker:run --iterations=1 --idle-sleep-milliseconds=1

Frontend Contractを使う公開済みExperimental Stable 1.2.1では、生成済みTreeを編集せず次を続けます。

php blackops frontend:generate
php blackops frontend:check
pnpm test

frontend:checkはFreshならExit 0、Missing/Driftなら1、Config/Artifact/Contract不正なら2です。Generated Treeを修正して通過させず、PHP ContractまたはApplication-owned Consumer Sourceを修正して再生成します。

Negative Path Matrix

Failure 実行例 期待結果
malformed JSON HTTPへ壊れたBodyを送る 400、Safe Error JSON、Raw BodyをLogへ残さない
Binding/Value Validation 必須Field欠落、型不一致、宣言的Rule違反 422、Violationのfieldrulecode
Authentication Credential欠落/不正 401。不正CredentialはOperation IDを作らない場合がある
Unknown/Unauthorized Unknown Route、Status PolicyのDeny 404。存在とDenyを区別しない
Business rejection Handlerが業務拒否を返す Rejected Lifecycle、CLIはExit 1(Validationは2
Worker retry/dead letter Workerを有限Loopで実行しRetryを待つ attempt.retry_scheduled、最終failed/Dead Letter。成功と混同しない
Frontend transport/poll .fetch().wait()の接続断、期限超過、Shape不一致 Result kind: transportとerror code(network_errorabortedpoll_timeoutunexpected_response)を区別し、Raw Responseを返さない

Deferredのpoll_timeoutはCancelではありません。Clientの待機期限とWorkerのSLOを分け、同じOperation IDへ後から.status()または有限.wait()を行います。失敗時の調査順はTroubleshooting、HTTP/Deferredの実装境界はInline and Deferredを参照してください。

利用者向け検証記録の扱い

QuickstartではApplicationのdocker composephp blackopsを使い、Build、Migration、HTTP、Worker、Inspectを実Processで確認します。BlackOps BoardではApplication-owned Identity、Outbox Relay、Deferred Digest、Retryを確認します。検証結果はApplicationのTest Reportへ、実行Command、環境、期待値、実測値、再現条件を記録します。Framework内部の管理用EvidenceやRepository固有のScriptを利用者手順へ持ち込みません。

Browser層はApplicationのBrowser Testを実行し、Credential、Actor ID、Worker ID、Raw Transport ErrorをGenerated Tree、Log、Browser Bundleへ残さないことも検査します。BlackOps Board Reference Applicationは、利用者がProject Rootまたは契約済みHosted InstanceでBrowser Journeyを観測するためのApplication-owned Reference Applicationです。Frameworkの内部運用記録を利用者向けの検証根拠として扱いません。

BlackOps BoardではApplication-owned Identity、Framework Session Core、SvelteKit same-origin BFF、Deferred Digestを一つのFull-stack Browser Journeyとして確認できます。