Skip to content

test: add test for zod array size cap #4181

Closed

Description

@KATO-Hiro
No description provided.

Activity

  1. KATO-Hiro commented on Oct 18, 2026

    @KATO-Hiro
    CollaboratorAuthor

    Zod 配列上限の早期判定に対するテスト強化

    概要

    #4150(Zod 4.6.5 → 4.6.7)の「上限超過時のフォーム確認」を、版に依存しない単体テストで置き換え、#4150 の CI で機械的に判定できるようにした。
    実装は 2026-10-18 に完了(schema.test.ts のみ、本番コード変更なし)。残りは下記「残作業」の人手作業だけ。

    調査結果(2026-10-18)

    • 挙動を変えたのは 4.6.6 の capSize(JIT 経路は generateSizeGate)。上限を持つサイズ check を超えた入力では、要素を解析せずに早期 return する。4.6.7 は版番号のみの変更。
    • 本リポジトリで該当するのは workBookTasks(.min(1).max(200))だけ。
    • 版で差が出るのは「201問以上かつ要素に不正値あり」のときの issues だけ(4.6.5:要素 issue + too_big、4.6.7:too_big のみ)。
    • フォームが読むのは workBookTasks._errors だけで、0・200・201問の全ケースで両版一致した(safeParse と Superforms 2.31.0 の superValidate で実測)。
    • 要素単位のエラーは画面に出ておらず、クライアント側の validator もないので、上記の差は表示に影響しない。
    • tarball 比較のみで、npm provenance の監査はしていない。

    意思決定

    • 版依存の挙動は assert しない: 201問以上のときに要素エラーが出るかは版で変わり、アプリも使っていない。assert すると表示に差がないのに版の上げ下げでテストが壊れる。
    • superValidate はモックせず、オブジェクトを直接渡す: route は devalue 形式のリクエストを受けるが、差は復元処理だけで、Zod の検証とエラーの対応付けは同じ処理を通る。
    • 201問テストの入力は全要素を正しくする: 4.6.7 では上限超過で早期 return するので、これで新しい経路を通る。
    • 別 PR で staging へ先に入れる: chore(deps): update dependency zod to v4.6.7 #4150 のブランチに直接コミットすると Renovate が自動更新しなくなる。
    • 4.6.7 のローカル確認はしない: chore(deps): update dependency zod to v4.6.7 #4150 の CI に任せる。

    却下した案

    • E2E・フォームのコンポーネントテスト: 描画は Zod と無関係で、管理者ログイン・DB・jsdom のコストに見合わない。
    • 要素エラーを復元する互換 shim: 表示されていない値のためのもので、AGENTS.md の方針にも反する。
    • 201問の重複テスト: 既存テストの assert 強化で足りる。

    検出力(mutation、4.6.5 で実施)

    schema.ts の変異 201問テスト Superforms テスト
    .max(200, ...) のメッセージ変更 失敗 失敗
    .max(200, ...) を削除 失敗 失敗

    残作業(人手)

    1. 本変更を staging へマージした後、chore(deps): update dependency zod to v4.6.7 #4150 の PR 本文にある Renovate の rebase チェックボックスで更新する。Actions の再実行は元の merge commit を使うので rebase が必要。
    2. 4.6.7 上の CI で新テストが通れば、chore(deps): update dependency zod to v4.6.7 #4150 の残りの確認事項は解消とする(upstream-pr-review の 2026-10-14 chore(deps): update dependency zod to v4.6.7 #4150 節に追記済み)。
    3. chore(deps): update dependency zod to v4.6.7 #4150 のマージ後、同文書の運用に従って 台帳)へ移す。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions