我正在尝试为以下上传图像的 Livewire 组件编写测试:
use Livewire\Component;
use Livewire\WithFileUploads;
class UploadImage extends Component
{
use WithFileUploads;
public $image;
public function save()
{
$this->validate([
'image' => 'image|mimes:jpg,jpeg',
]);
$storedImage = $this->image->store('images'); // returns e.g. "images/PznpCCFUUDjZuZRDEAGpsr7SxV2qIM2dEsZ3l0zO.jpeg"
// save $storedImage as the name in the images table
}
}
下面的测试失败,因为文件以散列名称保存到磁盘和数据库,而不是 test.jpg
。如何获取 Livewire 为测试中的图像创建的哈希名称?
组件中的$storedImage
与测试中的$image->hashName()
不一样
/** @test **/
function it_can_upload_an_image() {
Storage::fake();
$image = UploadedFile::fake()->image('test.jpeg');
Livewire::test(UploadImage::class)
->set('image', $image)
->call('save');
$this->assertDatabaseHas('images', [
'name' => "images/{$image->hashName()}",
]);
Storage::assertExists("images/{$image->hashName()}");
}
最佳答案
我在源码的测试中找到了答案here 。解决办法就是这么简单🤦♂️
向组件中添加 $storedImage
的公共(public)属性,以便可以在测试中访问它。
例如
use Livewire\Component;
use Livewire\WithFileUploads;
class UploadImage extends Component
{
use WithFileUploads;
public $image;
public $storedImage;
public function save()
{
$this->validate([
'image' => 'image|mimes:jpg,jpeg',
]);
$this->storedImage = $this->image->store('images');
// save $storedImage as the name in the images table
}
}
现在可以从测试中访问哈希名称,如下所示:
/** @test **/
function it_can_upload_an_image() {
Storage::fake();
$image = UploadedFile::fake()->image('test.jpeg');
$storedImage = Livewire::test(UploadImage::class)
->set('image', $image)
->call('save')
->get('storedImage');
$this->assertDatabaseHas('images', [
'name' => $storedImage,
]);
Storage::assertExists($storedImage);
}
关于laravel - 如何在测试中获取使用 Laravel Livewire 上传的文件的哈希名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63501268/