Створення екземплярів PHP-класів з заповненням фейковими даними за допомогою Faker

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 08 січня, 2025
Ви коли-небудь стикалися з труднощами під час тестування вашого Laravel-застосунку через нестачу реалістичних даних? Пакет Dummy, розроблений Стівом Бауманом, істотно спростить цей процес, дозволяючи вам генерувати об'єкти класів з реалістичними даними за допомогою Faker. Читайте далі, щоб дізнатися, як він може допомогти у вашій розробці

Dummy — це пакет, створений Стівом Бауманом, який дозволяє генерувати екземпляри PHP-класів із заповненими випадковими даними за допомогою Faker. Це може бути дуже корисно для отримання екземплярів будь-якого класу (не лише моделей Eloquent) з реалістичними даними під час тестування, заповнення бази даних або швидкого прототипування.

Встановити пакет можна через Composer:

composer require directorytree/dummy

Dummy надає можливість генерувати класи з випадковими даними двома способами:

  1. Використовуючи трейт HasFactory безпосередньо в класі, для якого потрібно згенерувати випадкові екземпляри.
  2. Використовуючи окремий Factory клас, що надає більше контролю над процесом генерації даних.

Приклади кожного з варіантів наведені нижче:

namespace App\Data;
 
use Faker\Generator;
use DirectoryTree\Dummy\HasFactory;
 
class Player
{
    use HasFactory;
 
    /**
     * Створити новий екземпляр гравця.
     */
    public function __construct(
        public string $name,
        public DateTime $dob,
        public string $nationality,
    ) {}
 
    /**
     * Визначити стандартний стан фабрики.
     */
    protected function getFactoryDefinition(Generator $faker): array
    {
        return [
            'name' => $faker->name(),
            'dob' => $faker->dateTimeBetween('1970-01-01', '-16 years'),
            'nationality' => $faker->country(),
        ];
    }
 
    /**
     * Створити новий екземпляр класу, використовуючи визначення фабрики.
     */
    protected static function toFactoryInstance(array $attributes): static
    {
        return new static(
            $attributes['name'],
            $attributes['dob'],
            $attributes['nationality'],
        );
    }
}
namespace App\Factories;
 
use App\Data\Player;
use DirectoryTree\Dummy\Factory;
 
class PlayerFactory extends Factory
{
    /**
     * Визначити стандартний стан фабрики.
     */
    protected function definition(): array
    {
        return [
            'name' => $this->faker->name(),
            'dob' => $this->faker->dateTimeBetween('1970-01-01', '-16 years'),
            'nationality' => $this->faker->country(),
        ];
    }
 
    /**
     * Згенерувати новий екземпляр класу.
     */
    protected function generate(array $attributes): Player
    {
        return new Player(
            $attributes['name'],
            $attributes['dob'],
            $attributes['nationality'],
        );
    }
}

Для генерації випадкових екземплярів класу можна використовувати метод make:

// Використовуючи трейт:
$player = Player::factory()->make();
 
// Використовуючи клас фабрики:
$player = PlayerFactory::new()->make();

Крім того, пакет дозволяє:

Отже, у підсумку, Dummy є доповненням до стандартних класів фабрик Laravel, розширюючи підтримку для невиконаних класів, пропонуючи як варіант з трейтом, так і окремі реалізації фабрики, а також забезпечуючи зручний API для генерації екземплярів. Це універсальний інструмент для створення випадкових даних у різних частинах вашої програми.

Дізнайтеся більше про цей пакет та перегляньте вихідний код на GitHub.