Testing
BlackOps Applicationを検証するときの層と、既存の実行例への入口を確認する。
BlackOps ApplicationのTestは、Operationの業務規則、HTTP BindingとValidation、Inline/Deferredの実行境界、Databaseを含むWorker経路を分けて確認します。BlackOps専用のTesting APIやTest Runnerは提供していないため、Applicationが選んだPHP Test Frameworkと実Runtimeを組み合わせてください。
確認する層
| 層 | 確認すること | 既存の入口 |
|---|---|---|
| Operation | 型付きValueからOutcomeまたは業務Rejectedを返す | Authoring |
| HTTP Boundary | Route、Binding、宣言的Value Validation、Status/JSON | Value and Validation |
| Inline/Deferred | 同じOperation ModelでResponseと受付境界が分かれる | Inline and Deferred |
| Frontend Contract | Generate/Drift、DOMなしStrict Type、.url()/.toRequest()/.fetch()/.status()/.wait()のRequestとResult |
4. Generated Operation Objectから呼ぶ |
| Consumer E2E | Build、Migration、HTTP、Worker、Journal、Outcomeを実Processでつなぐ | Quickstart and Skeleton |
| Full-stack Browser | Application-owned Identity、Framework Session、Ephemeral Auth、SvelteKit BFF、Inline/Deferred UI、Sensitive Boundary、Accessibility | BlackOps Board Reference Application |
Unit TestだけでDeferred処理のDurabilityを保証したと判断しないでください。少なくともApplicationと同じPostgreSQL SchemaへMigrationを適用し、HTTP 202のOperation IDを使ってWorker後のJournalとOutcomeを確認します。
Validation Failureを固定する
成功例だけでなく、壊れたJSONの400、Binding Failureの422、宣言的Value Validationの422、Handler内の業務Rejectedを別Caseとして固定します。Sensitive値を使うTestでは、Canonical StoreのAccess制御とObserved JournalのMask/Exclude/Hashを混同せず、公開するLogやFixtureへRaw Secretを残さないでください。
Generated Frontendを実HTTPへ接続する
QuickstartはFrozen Frontend Lockfileと次の順序を正本にします。
pnpm install --frozen-lockfile
php blackops build:compile
php blackops frontend:generate
php blackops frontend:check
pnpm test
Consumer E2EではGenerated Welcome/Report/Order/Diagnostics ObjectをWorker Mode HTTPへ接続し、200 completed、202 accepted、422 validation、500 internal、Fetch Throwのtransportを確認します。.url()、.toRequest()、Readonly Metadataも同じCompiled Contractと比較します。
Deferred Journeyでは、.fetch()が一回のPOSTだけで202を返すこと、.status()がacceptedを一回取得すること、Nodeの有限.wait()中にShell側でWorker Retryを進めてTyped Completed Outcomeへ到達することを確認します。別Operationの短いDeadlineはpoll_timeoutになり、その後のWorker処理を壊しません。不正Credentialは401、Anonymous/Unknown/Denyは404、Non-terminalだけにRetry-After、全Responseにprivate, no-storeがあることも実HTTPで固定します。
Browser Testはnative AbortController、DOMなしNode Testは購読可能なStructural Signal Helperを使います。Sensitive Input、Credential、Actor ID、Worker ID、Raw Transport ErrorをGenerated Tree、Typed Result、Application/Observed Logで検索し、非露出を固定してください。
QuickstartはFrameworkの最短Contractを実HTTPへ接続します。BlackOps BoardはそのContractをApplication-owned Identity、Framework Session Core、Ephemeral Auth Operation、Domain/Infrastructure、SvelteKit Same-origin BFF、Deferred Progress UIへ広げたReference Applicationです。BlackOps Board Reference Applicationでは、Clean Installと個別Consumer、実Browser E2Eの使い分けを確認できます。
再現可能なInput/OutputはFirst Operation、失敗時の調査順はTroubleshootingを参照してください。