LaravelでExcelファイルをアップロードする処理のテストする

画像ファイルのアップロードのテストは「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('登録しました');

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください