はじめに
CTIのサービスに携わっている為、音声ファイル関連の機能に関わる事が多く自動テストで音声ファイルを扱う機能をカバーしたいと考えていました。
初期実装では、UploadedFile::fake()
を利用して以下のようにダミーデータ作り対応していました。
<?php use Illuminate\Http\UploadedFile; $record_file = UploadedFile::fake()->create( name: 'record-file-sample.wav', mimeType: 'audio/x-wav' );
しかしダミーデータでは、ファイルサイズチェックなどの一部メソッドのテストが上手くいかなかった為(この辺りの調査は必要かもしれない)、自分で用意したテストデータを持つファイルをPOSTする方法を調べたのでまとめておきます。
環境
Laravel8系
実装方法
1, テスト用の音声ファイルを用意する
今回はテスト用データとして利用する場面が多くなる事を想定し、テスト用ファクトリディレクトリを作成。そこに該当データを置きます。
2, Illuminate\Http\UploadedFile
オブジェクトを生成
<?php use Illuminate\Http\UploadedFile; dummy = new UploadedFile( './tests/Factory/File/sample-test.wav', 'record-file-sample.wav', 'audio/x-wav', null, true, );
補足
UploadFile
のコンストラクタ引数についても確認しておきたいと思います。
このクラスはSymfony\Component\HttpFoundation\File\UploadedFile
クラスを継承しているのでそちらを見るとコンストラクタが書かれています。
<?php /** * @param string $path ファイルへのパス * @param string $originalName アップロードされたファイルのオリジナルファイル名 * @param string|null $mimeType PHP が提供するファイルの型。 * @param int|null $error アップロード時のエラー定数 * @param bool $test テストモードが有効かどうか */ public function __construct(string $path, string $originalName, string $mimeType = null, int $error = null, bool $test = false) { ... 略 }