Как создать фабрику с изображениями для тестирования - PullRequest
0 голосов
/ 17 июня 2020

Мне нужно создать фабрику по созданию образов для тестирования. Фабрика должна создавать изображения и сохранять их в хранилище, а после теста все должно быть стерто.

Как я могу это сделать?

Сейчас я думаю о том, чтобы поместить поля при нуле на заводе, а затем с помощью метода afterCreating для сохранения изображений вручную, но это должен быть лучший способ сделать это правильно?

Я хочу достичь:

factory(Category::class)->create();

Это сгенерирует все изображения.

$ faker-> image больше не работают, так как LoremPixel (поставщик) большую часть времени действительно тормозит или тормозит.

Ответы [ 3 ]

0 голосов
/ 17 июня 2020

Конечно, вы можете создавать изображения с помощью 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(), которая не требует пояснений,


@method string image($dir = null, $width = 640, $height = 480, $category = null, $fullPath = true, $randomize = true, $word = null)

Единственное, что вам нужно очистить каталог test-images после завершения тестового запуска .

0 голосов
/ 17 июня 2020

Более чистый способ, который я нашел:

  1. Установите значение null на заводе

    $factory->define(Category::class, function (Faker $faker) {
        return [
            'img' => null,
       ];});
    
  2. Используйте $ factory-> afterCreating, чтобы переопределить значение и сохранить изображение

    $factory->afterCreating(Category::class, function ($category, $faker) {
       $category->img = UploadedFile::fake()->image(uniqid() . '.jpg')->store('categories');
       $category->save();
    });
    
  3. Создайте фальшивое хранилище в тестовом setUp () и сбросьте его в tearDown ()

    protected function setUp ( ): void {parent :: setUp (); Storage :: fake ('publi c');}

    защищенная функция tearDown (): void {Storage :: fake ('publi c' ); }

Это решение создает изображения для тестирования и удаляет все после него.

(Извините за образец кода, я не могу сделать отступы должным образом)

0 голосов
/ 17 июня 2020

Вы можете создавать поддельные изображения, используя $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),

    ];
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...