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).
Не забути негативні випадки: завеликий файл, неправильний тип, чужий користувач не може видалити файл. Саме там зазвичай діри.