Проблема в том, что вы переименовываете свой файл в контроллере с помощью md5($image . microtime())
, поэтому вы не можете утверждать, что image1.jpg
существует, так как вы изменили имя.
Что вы могли бы сделать, это позволить laravel name файл и затем проверьте, что в вашем тесте:
В вашем контроллере:
Замените storeAs
на store
, store
сгенерирует уникальный идентификатор, который будет служить именем файла.
public function store(Request $request)
{
if ($request->hasFile('filename')) {
foreach ($request->file('filename') as $image) {
$image->store('', 'uploads');
}
}
}
В вашем тесте:
Чтобы установить, существует ли изображение, мы будем использовать тот же метод для генерации уникального идентификатора, что и laravel при сохранении изображения. Замените 'image1.jpg' на $image->hashName()
в своем утверждении.
public function testUserCanSuccessfullySubmitSingleImage(): void
{
Storage::fake('uploads');
$this->postJson('/upload', [
'filename' => $image = UploadedFile::fake()->image('image1.jpg')
]);
Storage::disk('uploads')->assertExists($image->hashName());
Storage::disk('uploads')->assertMissing('missing.jpg');
}
Из документов :
В веб-приложениях одно из самых Распространенные сценарии использования для хранения файлов - это сохранение загруженных пользователем файлов, таких как изображения профиля, фотографии и документы. Laravel позволяет очень легко сохранять загруженные файлы, используя метод store для экземпляра загруженного файла. Вызовите метод store с путем, по которому вы sh сохраните загруженный файл:
public function update(Request $request)
{
$path = $request->file('avatar')->store('avatars');
return $path;
}
В этом примере необходимо отметить несколько важных моментов. Обратите внимание, что мы указали только имя каталога, а не имя файла. По умолчанию метод store генерирует уникальный идентификатор в качестве имени файла. Расширение файла будет определено путем изучения типа файла MIME. Путь к файлу будет возвращен методом store, чтобы вы могли сохранить путь, включая сгенерированное имя файла, в вашей базе данных.