Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

Як тестувати завантаження й збереження файлів?

Storage::fake() підміняє диск тимчасовою текою, а UploadedFile::fake() створює файл-заглушку.

it('stores the avatar', function () {
    Storage::fake('public');
    $user = User::factory()->create();

    $this->actingAs($user)
        ->post('/profile/avatar', ['avatar' => UploadedFile::fake()->image('me.jpg', 400, 400)])
        ->assertRedirect();

    Storage::disk('public')->assertExists($user->fresh()->avatar_path);
});

it('rejects a file that is too big', function () {
    Storage::fake('public');

    $this->actingAs(User::factory()->create())
        ->post('/profile/avatar', ['avatar' => UploadedFile::fake()->create('big.jpg', 5000)])
        ->assertInvalid(['avatar']);

    Storage::disk('public')->assertDirectoryEmpty('avatars');
});

Що варто знати:

  • fake()->image() створює справжнє зображення (потрібен GD) - пройде image і dimensions;
  • fake()->create('doc.pdf', 1024, 'application/pdf') - файл заданого розміру в кілобайтах і MIME-типу, без реального вмісту;
  • перевірки: assertExists, assertMissing, assertCount, assertDirectoryEmpty;
  • шлях краще брати з моделі, а не вгадувати: збережене ім'я генерується (hashName).

Не забути негативні випадки: завеликий файл, неправильний тип, чужий користувач не може видалити файл. Саме там зазвичай діри.

Докладніше в документації: Тестування

Перевір себе

20 випадкових питань за спробу, після завершення - розбір кожної помилки

Схожі питання