Я пишу функциональный тест для простой загрузки фотографий на S3 с использованием Laravel Medialibrary.
Это тест:
/** @test */
public function a_user_can_upload_a_photo()
{
$this->withoutExceptionHandling();
Storage::fake('s3');
$user = factory(User::class)->create();
$this->signIn($user);
$this->post( route('users.update.photo', [
$user,
'photo' => UploadedFile::fake()->image('photo.jpeg', 500, 500)->size(1000),
]));
$this->assertEquals(1, Media::all()->count());
Storage::disk('s3')->assertExists('photo.jpeg');
}
, и это соответствующая часть метод контроллера, обрабатывающий загрузку:
public function uploadPhoto(User $user, Request $request)
{
// ...
try {
$user->addMediaFromRequest('photo')
->preservingOriginal()
->toMediaCollection('user-photo');
} catch (\Exception $e) {
dd($e);
Log::debug('User photo upload: ' . $e);
}
return redirect(route('users.edit.profile', $user));
}
Ошибка, зафиксированная с помощью dd($e)
, равна
В текущем запросе нет файла в ключе с именем photo
Я на самом деле могу проверить, что сообщение об ошибке истинно, поставив прямо перед try-catch:
dd($request->has('photo'));
=== true
но
dd($request->hasFile('photo'));
=== false
Таким образом, я не прикрепляю свой фиктивный файл как файл к запросу, очевидно, но я Я не могу понять, как это сделать, и каждый пример, связанный с моими поисковыми запросами в Интернете, предлагает выполнить тест так, как я это уже делаю.
Любая помощь очень ценится.