Файл в тесте в Livewire
Пусть компонент поста принимает вложение с диска, а после сохранения должен запомнить имя файла. В тесте нет настоящей загрузки через браузер и нет реального файла на диске.
Поддельный файл через
метод fake и метод create
даёт объект такого же
вида, как после формы.
Его можно передать в
свойство с трейтом загрузки
и дальше прогнать сценарий
как с обычным вложением.
Давайте создадим компонент
PostFile с полем
фото:
php artisan make:livewire PostFile --class
php artisan make:test PostFileTest
<?php
namespace App\Livewire;
use Livewire\Component;
use Livewire\WithFileUploads;
class PostFile extends Component
{
use WithFileUploads;
public $photo;
public $name = '';
public function keep()
{
$this->name = $this->photo
->getClientOriginalName();
}
public function render()
{
return view('livewire.post-file');
}
}
?>
Давайте в тесте подставим файл, вызовем сохранение имени и сверим свойство:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Livewire\PostFile;
use Livewire\Livewire;
use Illuminate\Http\UploadedFile;
class PostFileTest extends TestCase
{
public function test_file_name_is_kept(): void
{
$file = UploadedFile::fake()
->create('note.txt', 10);
Livewire::test(PostFile::class)
->set('photo', $file)
->call('keep')
->assertSet('name', 'note.txt');
}
}
?>
Создайте компонент
EmployeeFile и тест
EmployeeFileTest.
Поддельный файл с именем
portrait.png попадает
в компонент работника.