РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
258 of 274 menu

Метод upload

Метод upload класса Testable используется в тестах для симуляции загрузки файла в компонент Livewire. Он принимает имя свойства компонента, которое должно быть помечено атрибутом #[Validate] или #[Rule] для валидации, и экземпляр загружаемого файла. Этот метод позволяет протестировать логику обработки файлов без необходимости реальной загрузки через веб-интерфейс.

Метод возвращает экземпляр Testable для цепочки вызовов.

Синтаксис

$livewire->upload('propertyName', $uploadedFile);

Пример

Давайте создадим компонент для загрузки аватара и протестируем его:

<?php namespace App\Livewire; use Livewire\Component; use Livewire\WithFileUploads; use Livewire\Attributes\Rule; class AvatarUpload extends Component { use WithFileUploads; #[Rule('required|image|max:1024')] public $avatar; public function uploadAvatar() { $this->validate(); // Логика сохранения файла // $path = $this->avatar->store('avatars', 'public'); session()->flash('message', 'Avatar uploaded successfully!'); } public function render() { return view('livewire.avatar-upload'); } } ?>
<div> <form wire:submit="uploadAvatar"> <input type="file" wire:model="avatar" /> @error('avatar') <span>{{ $message }}</span> @enderror <button type="submit">Upload</button> </form> @if (session()->has('message')) <div>{{ session('message') }}</div> @endif </div>

Теперь напишем тест для этого компонента с использованием метода upload:

<?php namespace Tests\Feature\Livewire; use App\Livewire\AvatarUpload; use Illuminate\Http\UploadedFile; use Livewire\Livewire; use Tests\TestCase; class AvatarUploadTest extends TestCase { public function test_avatar_upload_successfully() { $file = UploadedFile::fake()->image('avatar.jpg'); Livewire::test(AvatarUpload::class) ->upload('avatar', $file) ->call('uploadAvatar') ->assertHasNoErrors('avatar') ->assertSee('Avatar uploaded successfully!'); } public function test_avatar_upload_validation_fails() { $file = UploadedFile::fake()->create('document.pdf', 1000); Livewire::test(AvatarUpload::class) ->upload('avatar', $file) ->call('uploadAvatar') ->assertHasErrors('avatar'); } } ?>

В первом тесте мы имитируем загрузку изображения, вызываем метод uploadAvatar и проверяем отсутствие ошибок и наличие сообщения об успехе. Во втором тесте мы загружаем неподходящий файл и проверяем наличие ошибок валидации.

Пример

Метод upload также может использоваться для тестирования нескольких файлов, если свойство компонента является массивом:

<?php namespace App\Livewire; use Livewire\Component; use Livewire\WithFileUploads; use Livewire\Attributes\Rule; class FileUpload extends Component { use WithFileUploads; #[Rule('required|array|max:3')] #[Rule('files.*:required|file|mimes:pdf|max:2048')] public $files; public function uploadFiles() { $this->validate(); session()->flash('message', 'Files uploaded successfully!'); } public function render() { return view('livewire.file-upload'); } } ?>
<?php namespace Tests\Feature\Livewire; use App\Livewire\FileUpload; use Illuminate\Http\UploadedFile; use Livewire\Livewire; use Tests\TestCase; class FileUploadTest extends TestCase { public function test_multiple_files_upload_successfully() { $files = [ UploadedFile::fake()->create('document1.pdf', 1000), UploadedFile::fake()->create('document2.pdf', 1500), ]; Livewire::test(FileUpload::class) ->upload('files', $files) ->call('uploadFiles') ->assertHasNoErrors('files') ->assertSee('Files uploaded successfully!'); } public function test_multiple_files_validation_fails() { $files = [ UploadedFile::fake()->image('image.jpg'), UploadedFile::fake()->create('document.pdf', 3000), ]; Livewire::test(FileUpload::class) ->upload('files', $files) ->call('uploadFiles') ->assertHasErrors('files'); } } ?>

В этих примерах мы передаем массив файлов в метод upload и проверяем как успешную загрузку, так и ошибки валидации.

Смотрите также

  • метод set,
    который устанавливает значение свойства компонента
  • метод call,
    который вызывает метод компонента
  • метод assertHasErrors,
    который проверяет наличие ошибок валидации
  • метод assertSee,
    который проверяет наличие текста в выводе компонента
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить