Фабрики Laravel: Створення реалістичних тестових даних за допомогою заводських шаблонів Laravel
Створення надійних додатків з безперебійними робочими процесами тестування та розробки вимагає надійної хостингової платформи. VPS-хостинг від AlexHost забезпечує ідеальне середовище для проектів на Laravel, пропонуючи повний root-доступ, високу продуктивність і безпечну інфраструктуру. З AlexHost ви можете розгортати свої додатки на Laravel і керувати складними сценаріями тестування, наприклад, за участю фабрик Laravel, з упевненістю і легкістю.
При розробці додатків на Laravel тестування є важливою частиною забезпечення того, щоб ваш додаток поводився так, як очікується. Щоб тестування було більш ефективним, вам потрібні реалістичні тестові дані, які максимально наближені до даних, з якими ваш додаток буде працювати у виробництві. Фабрики Laravel надають простий, але потужний спосіб створення таких даних за допомогою фабричних шаблонів. Фабрики дозволяють вам визначити, як повинні виглядати шаблони, що дозволяє швидко генерувати тестові дані.
Цей посібник проведе вас через процес створення і використання фабрик Laravel для створення реалістичних тестових даних.
Що таке фабрики в Laravel?
Фабрики в Laravel – це класи, які визначають план створення екземплярів моделі. Вони особливо корисні для створення фальшивих тестових даних або для наповнення баз даних оригінальними даними. Використовуючи фабрики, ви можете створювати один або декілька екземплярів ваших моделей, кожен з яких має унікальні атрибути.
Фабрики використовують Faker, бібліотеку PHP, щоб генерувати фейкові дані, такі як імена, адреси, електронні адреси та інше, щоб дані виглядали реалістично.
Необхідні умови
- Laravel 9 або новішої версії.
- Базові знання моделей Eloquent та структури бази даних Laravel.
- Підключення до бази даних, налаштованої у вашому .env файлі.
Крок 1: Створення фабрики моделей
У Laravel 8 і пізніших версіях фабрики визначаються як класи. Ви можете створити нову фабрику за допомогою команди artisan:
Це створить новий файл фабрики в каталозі database/factories з ім’ям UserFactory.php.
Крок 2: Визначте фабрику
Відкрийте файл UserFactory.php, розташований у каталозі database/factories:
<?php
namespace Database\Factories;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
class UserFactory extends Factory
{
protected $model = User::class;
public function definition()
{
return [
'name' => $this->faker->name,
'email' => $this->faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => bcrypt('password'), // or Hash::make('password')
'remember_token' => Str::random(10),
];}}
Пояснення
- $model: Вказує, для якої моделі Eloquent призначена ця фабрика.
- definition(): Цей метод повертає масив атрибутів, які визначають модель. Він використовує екземпляр Faker ($this->faker) для генерації випадкових даних для кожного атрибуту.
- name: використовує faker->name для створення реалістичного імені.
- email: використовує faker->unique()->safeEmail для створення унікальної адреси електронної пошти.
- password: встановлює пароль за замовчуванням за допомогою функції bcrypt().
- remember_token: Генерує випадковий рядок для поля remember_token.
Це заводське визначення створить реалістичні облікові дані користувача з унікальною адресою електронної пошти та випадковими іменами.
Крок 3: Використовуйте фабрики для створення екземплярів моделі
Ви можете використовувати фабрику для створення одного або декількох екземплярів моделі. Ось кілька прикладів:
3.1. Створення одного користувача
Щоб створити єдиний екземпляр користувача в тесті або сівалці, використовуйте метод create:
$user = \App\Models\User::factory()->create();
Це створить користувача в базі даних з атрибутами, визначеними у фабриці.
3.2. Створення декількох користувачів
Для створення декількох екземплярів користувачів:
$users = \App\Models\User::factory()->count(10)->create();
Це створить 10 записів користувачів у базі даних.
3.3. Створити екземпляр без збереження (метод Make)
Якщо ви хочете створити екземпляр без збереження в базі даних, використовуйте метод make:
$user = \App\Models\User::factory()->make();
Це створить об’єкт моделі User без збереження його в базі даних.
Крок 4: Налаштування заводських станів
Стани дозволяють вам визначати різні версії фабрики, що може бути корисно для створення користувачів з різними ролями або статусами.
4.1. Визначте стан
Ви можете визначати стани в межах класу фабрики:
public function admin()
{
return $this->state(function (array $attributes) {
return [
'is_admin' => true,
];
});
}
Цей стан адміністратора можна використовувати для створення користувачів з атрибутом is_admin, встановленим у true.
4.2. Використання стану
Використовувати стан адміністратора при створенні користувачів:
$adminUser = \App\Models\User::factory()->admin()->create();
Це створить користувача з атрибутом is_admin, встановленим у true.
Крок 5: Використання фабрик у тестах
Фабрики є особливо потужним інструментом при написанні тестів. Вони дозволяють швидко створювати тестові дані і зосередитися на логіці, яку ви перевіряєте.
5.1. Створення тестових даних у тестовому кейсі
Ось приклад використання фабрики в тесті:
public function test_users_can_be_created()
{
$user = \App\Models\User::factory()->create();$this->assertDatabaseHas('users', [
'email' => $user->email,
]);
}
Цей тест створює користувача, а потім перевіряє, чи існує він у таблиці users з вказаним email.
Крок 6: Заповнення бази даних фабриками
Заводи також можна використовувати в сівалках бази даних для заповнення таблиць вибірки даних.
6.1. Створення сівалки
Створіть сівалку за допомогою команди ремісник:
Відкрийте файл UserSeeder.php у каталозі database/seeders і скористайтеся фабрикою для створення користувачів:
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Seeder;
class UserSeeder extends Seeder
{
public function run()
{
User::factory()->count(50)->create();
}
}
Цей сівалка створить 50 користувачів за допомогою User factory.
6.2. Запуск сівалки
Запустіть сівалку за допомогою:
php artisan db:seed --class=UserSeeder
Ця команда заповнить таблицю користувачів 50 випадковими записами користувачів.
Крок 7: Використання з’єднань на фабриках
Якщо у вас є моделі зі зв’язками, такі як User і Post, ви можете створити фабрики, які створюють зв’язані дані:
7.1. Визначте зв’язки
У PostFactory.php
public function definition()
{
return [
'user_id' => \App\Models\User::factory(),
'title' => $this->faker->sentence,
'body' => $this->faker->paragraph,
];
}
Це визначення гарантує, що при створенні допису, користувач буде автоматично згенерований за допомогою фабрики користувачів.
7.2. Створення публікації з асоційованим користувачем
$post = \App\Models\Post::factory()->create();
Це створить пост з асоційованим з ним користувачем.
Висновок
Фабрики Laravel – це потужний інструмент для створення реалістичних тестових даних, що робить ваші тести більш надійними, а процес розробки швидшим. Використовуючи шаблони фабрик, ви можете легко створювати варіації моделей, імітувати різну поведінку користувачів і наповнювати бази даних. Розуміння того, як використовувати стани, взаємозв’язки і генерацію користувацьких даних за допомогою фабрик Laravel, значно покращить ваш робочий процес тестування і розробки. Щасти вам у кодуванні!