Laravel6.0
ファイルアップロードのテストで詰まったのでメモ。
ファイルアップロード
public function update(Request $request)
{
$path = $request->file('avatar')->store('avatars');
return $path;
}
filesystems.php
が下記の場合、
ファイルが保存される場所はstorage/app/avatar/
filesystems.php
'default' => env('FILESYSTEM_DRIVER', 'local'),
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/html'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
],
],
ファイルアップロードのテスト
public function testAlbumUpload()
{
Storage::fake('photos'); // ここの記述が間違っていた
$response = $this->json('POST', '/photos', [
UploadedFile::fake()->image('photo1.jpg'),
UploadedFile::fake()->image('photo2.jpg')
]);
// ひとつ以上のファイルが保存されたことをアサート
Storage::disk('photos')->assertExists('photo1.jpg');
Storage::disk('photos')->assertExists(['photo1.jpg', 'photo2.jpg']);
// ひとつ以上のファイルが保存されなかったことをアサート
Storage::disk('photos')->assertMissing('missing.jpg');
Storage::disk('photos')->assertMissing(['missing.jpg', 'non-existing.jpg']);
}
storage/app/avatar
に保存されるファイルのテストをしたくて
Storage::fake('avatar');
と記述していた。
正しくは
Storage::fake('local');
と記述する必要がある。
書き直すと下記のようになる。
public function testAlbumUpload()
{
Storage::fake('local');
$response = $this->json('POST', '/photos', [
UploadedFile::fake()->image('photo1.jpg'),
UploadedFile::fake()->image('photo2.jpg')
]);
Storage::disk('photos')->assertExists('avatar/photo1.jpg');
Storage::disk('photos')->assertMissing('avatar/missing.jpg');
}