【Laravel】複雑な処理の結果生まれるデータのテストデータを比較的楽に生成する

 Laravel は PHP のフレームワークで web サイトの構築の役に立ってくれます。web サイトということでいくつかのページで手順を踏んだ後に生まれるデータがあることがしばしばあります。例えば、ショッピングサイトで色々カートに入れて、注文した後に生まれるデータです。
 また、開発中においてはよく何らかの機能を試すためのテストデータが欲しくなります。この何らかの機能とは例えば検索です。検索対象がないと試すのにも困る、といった具合です。このテストデータはあらかじめ期待されている結果からデータを作ることもあれば、単にランダムな値を入れることもあります。テストデータはテストに使うということもあり、正常なシステム中にありうるデータである必要があります(致命的バグのフェールセーフがちゃんと動くか試すためにデータベースの制約上許される不整合なデータをあえて用意することもありますが、割愛)。先に述べた複雑な手順の結果生まれるデータについてはテストデータを考えるのも一苦労です。そういった時、多数のテストデータを生成する方法を紹介します。
 方針としては、実際に複雑な手順を実行してデータを生成します。ソースコードは次です。

class OrderSeeder extends Seeder
{
    public function run(): void
    {
        foreach (range(1, 10) as $i) {
            // リクエストをランダムに生成
            $requestParam = $this->cartRequestFactory();
            if (empty($requestParam)) {
                // 生成に失敗したら次ループへ移動
                continue;
            }
            // ブラウザからのリクエストを受け取るコントローラをインスタンス化
            $controller = new CartController();
            // 手順に必要なメソッドを呼び出して実行。DIを使っている場合はここで new するなりなんなりで頑張る
            $response = $controller->addItems(Request::create('', 'POST', $requestParam));

            // 次の手順
            // 前の手順のレスポンスを元に次のリクエストを生成
            $requestParam = $this->shoppingRequestFactory($response);
            // ブラウザからのリクエストを受け取るコントローラをインスタンス化
            $controller = new ShoppingController();
            // 手順に必要なメソッドを呼び出して実行
            $controller->storeFromCart(Request::create('', 'POST', $requestParam));

            // 三手順以上ならば同様にコントローラを呼び出して実行を繰り返します。
        }
    }
// 省略
}

 データを生み出すリクエストを実際に PHP の中だけで繰り返し行うわけです。まったくまっさらなところからテストデータを作ることはできませんが、テストデータを必要とする機能の前に、データを生み出す機能が実装済みならば手っ取り早く正常なテストデータを作れます。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG