画像ファイルのアップロードのテストは「UploadedFile::fake()->image()」を使ってテストできますが、Excelファイルのアップロードは同じようにはできません。
Excelファイルをアップロードする処理をテストする方法を紹介します。
PhpSpreadsheetのインストール
Excelファイルの読み書きのためにPhpSpreadsheetをインストールします。
composer require phpoffice/phpspreadsheet
テストコードの作成
テストコードを書いていきます。
use Illuminate\Http\UploadedFile;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Exception;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use Tests\TestCase;
class UploadTest extends TestCase
{
public function testStore()
{
}
}
Excelファイルの作成
テストコードでアップロードするExcelファイルを作成します。
Excelファイルを作成し、システムの一時ディレクトリに保存します。
# 新しいExcelスプレッドシートオブジェクトを作成
$spreadsheet = new Spreadsheet();
# 作成したスプレッドシートからアクティブなシートを取得
$sheet = $spreadsheet->getActiveSheet();
# シートのセルに値を設定
$sheet->setCellValue('A1', '森');
$sheet->setCellValue('B1', '一郎');
$sheet->setCellValue('A2', '林');
$sheet->setCellValue('B2', '二郎');
# Excelファイルを作成するためのライターオブジェクトを作成
$writer = new Xlsx($spreadsheet);
# 作成するExcelファイルのファイル名を生成
$filename = tempnam(sys_get_temp_dir(), '');
# ライターオブジェクトを使用して、先ほど作成したファイル名で保存
$writer->save($filename);
UploadedFileオブジェクトの作成
UploadedFileオブジェクトを作成します。
先ほど作成したExcelファイルをアップロードするようにします。
# アップロードされたファイルを表すUploadedFileオブジェクトを作成
$file = new UploadedFile(
# ファイルのパス
$filename,
# ファイル名
'sample.xlsx',
# MIMEタイプ
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
null,
true);
アップロード処理のテスト
ファイルをアップロードし、結果を確認します。
$this->post(route('upload.store'), [
'excel' => $file,
])
->assertSuccessful()
->assertSeeText('登録しました');