我需要创建一个工厂,创建测试的图像。工厂应创建图像并将其保存在存储器上,测试后应删除所有内容。我该怎么做?我现在想的是把 * 字段放在工厂的null*,然后使用afterCreating方法手动保存图像,但它必须是一个更好的方法来做到这一点,对吗?我想达到的是:
afterCreating
factory(Category::class)->create();
这将生成所有图像。
**$faker->image不再起作用,因为LoremPixel(提供商)在大多数情况下都很慢。
jljoyd4f1#
你可以用faker来创建图像,用于测试,如下所示:
<?php use App\Category; use Faker\Generator as Faker; $factory->define(Category::class, function (Faker $faker) { return [ 'name' => $faker->word, 'icon' => $faker->image('public/storage/test-images', 640, 480, null, false), ]; });
当你调用factory(\App\Category::class)->create();时,它会在**test-images/**目录下创建一个指定尺寸的镜像。下面是image()的签名,这是不言自明的,
factory(\App\Category::class)->create();
image()
@method string image($dir = null, $width = 640, $height = 480, $category = null, $fullPath = true, $randomize = true, $word = null)
唯一需要做的就是在测试运行完成后清除test-images目录。
test-images
oxf4rvwz2#
您可以使用$faker->image生成假图像。这里有一个例子
$faker->image
use Faker\Generator as Faker; $factory->define(Product::class, function (Faker $faker) { return [ 'amount' => $faker->randomFloat(2, 0, 10000), 'image' => $faker->image('public/storage/images',640,480, null, false), ]; });
liwlm1x93#
我发现的最简单的方法是:1.将工厂上的值设置为null
$factory->define(Category::class, function (Faker $faker) { return [ 'img' => null, ];});
1.使用$factory->afterCreating覆盖该值并保存图像
$factory->afterCreating(Category::class, function ($category, $faker) { $category->img = UploadedFile::fake()->image(uniqid() . '.jpg')->store('categories'); $category->save(); });
1.在testsetUp()上创建一个假存储,并在tearDown()上重置它protected function setUp():void {parent::setUp();存储::fake('public');}protected function():void{ Storage::fake('public');}此解决方案创建用于测试的图像,并删除之后的所有内容。(代码示例,我不能使它缩进正确)
3条答案
按热度按时间jljoyd4f1#
你可以用faker来创建图像,用于测试,如下所示:
当你调用
factory(\App\Category::class)->create();
时,它会在**test-images/**目录下创建一个指定尺寸的镜像。下面是
image()
的签名,这是不言自明的,唯一需要做的就是在测试运行完成后清除
test-images
目录。oxf4rvwz2#
您可以使用
$faker->image
生成假图像。这里有一个例子
liwlm1x93#
我发现的最简单的方法是:
1.将工厂上的值设置为null
1.使用$factory->afterCreating覆盖该值并保存图像
1.在testsetUp()上创建一个假存储,并在tearDown()上重置它
protected function setUp():void {parent::setUp();存储::fake('public');}
protected function():void{ Storage::fake('public');}
此解决方案创建用于测试的图像,并删除之后的所有内容。
(代码示例,我不能使它缩进正确)