シードなし faker のフィクスチャは Math.random の固定 PRNG 差し替えでロード単位に決定化できる — ただし環境間で値は揃わない
フロントエンド
テスト
faker
知識
運用
faker をシードなしで使うフィクスチャファクトリは、ロードのたびに日付・名前・アバターなどが変わり、ビジュアルリグレッションやスクリーンショット比較の判定を不安定にする。ファクトリ側に faker.seed を入れられない(他リポジトリの資産、ストーリー編集禁止などの)制約下でも、faker の自動シードが Math.random に由来することを利用し、実行環境の入口で Math.random を固定シードの疑似乱数(mulberry32 等)に差し替えると、ページロード単位で毎回同じ値列になり、同一環境内のキャプチャが決定的になる。
制約(重要)
2つの実行環境(例: 比較対象のリファレンスレンダラと自前プレビュー)の両方に同じ固定 PRNG を仕込んでも、環境ごとにフィクスチャ評価より前に Math.random を消費するコードの量が違うため、乱数列の位置がずれて生成値は揃わない。この手法で得られるのは「各環境内の再現性(キャプチャごとの揺れの排除)」であり、「環境間の値の一致」ではない。環境間比較では構造・スタイルの一致で判定し、値の差はフィクスチャノイズとして扱う運用に落とす。
適用条件
- フィクスチャ生成側を編集できない・したくない場合の環境層ワークアラウンド。ファクトリを編集できるなら明示的な faker.seed が正攻法。
- 時刻由来の揺れは別問題で、キャプチャ側のクロック固定(フェイクタイマー)と併用する。
検証
同じページを2回ロードして同一ピクセル(または同一テキスト値)になることを確認する。差し替えの注入位置がフィクスチャ評価より前かは、値が毎回変わるかどうかで判定できる。