Фабрики на Laravel: Изграждане на реалистични тестови данни с моделите на фабриките на Laravel ⋆ ALexHost SRL

Изпробвайте уменията си за всички наши хостинг услуги и получете 15% отстъпка!

Използвайте код на касата:

Skills
09.12.2024
No categories

Фабрики на 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:

php artisan make:factory UserFactory

Това ще създаде нов файл на фабриката в директорията database/factories с име UserFactory.php.

Стъпка 2: Дефиниране на фабрика

Отворете файла UserFactory.php, намиращ се в database/factories:


use Illuminate\Database\Eloquent\Factories\Factory;

use Illuminate\Support\Str;

клас UserFactory разширява Factory

{

protected $model = User::class;

публична функция definition()

{

return [

'name' => $this->faker->name,

'email' => $this->faker->unique()->safeEmail,

'email_verified_at' => now(),

'password' => bcrypt('password'), // или Hash::make('password')

'remember_token' => Str::random(10),

];

}

}

Обяснение

  • $model: Указва за кой модел на Eloquent е предназначена тази фабрика.
  • definition(): Този метод връща масив от атрибути, които определят модела. Той използва инстанцията на Faker ($this->faker), за да генерира случайни данни за всеки атрибут.
  • name: Използва faker->name, за да генерира реалистично име.
  • имейл: Използва 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. Дефиниране на състояние

Можете да дефинирате състояния в рамките на класа factory:

публична функция admin()

{

return $this->state(function (array $attributes) {

return [

'is_admin' => true,

];

});

}

Това състояние на администратор може да се използва за създаване на потребители с атрибут is_admin, зададен на true.

4.2. Използване на състояние

За да използвате състоянието admin при създаване на потребители:

$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 с посочения имейл.

Стъпка 6: Попълване на базата данни с фабрики

Фабриките могат да се използват и в сеялките за бази данни за попълване на таблиците с примерни данни.

6.1. Създаване на сеялка

Създайте сеедер, като използвате командата artisan:

php artisan make:seeder UserSeeder

Отворете файла UserSeeder.php в database/seeders и използвайте фабриката за генериране на потребители:


use Illuminate\Bаза данни\Seeder;

клас UserSeeder разширява Seeder

{

публична функция run()

{

User::factory()->count(50)->create();

}

}

Този сеяч ще създаде 50 потребители, като използва фабриката User.

6.2. Стартиране на сеялката

Стартирайте сеялката, като използвате:

php artisan db:seed –class=UserSeeder

Тази команда попълва таблицата users с 50 произволни записа на потребители.

Стъпка 7: Използване на връзки във фабриките

Ако имате модели с връзки, например User (Потребител) и Post (Публикация), можете да създадете фабрики, които създават свързани данни:

7.1. Дефиниране на връзки

В PostFactory.php:

публична функция definition()

{

return [

'user_id' => \App\Models\User::factory(),

'title' => $this->faker->sentence,

'body' => $this->faker->paragraph,

];

}

Тази дефиниция гарантира, че при създаването на публикация автоматично се генерира потребител, като се използва фабриката User.

7.2. Създаване на публикация със свързан потребител

$post = \App\Models\Post::factory()->create();

Това ще създаде публикация заедно с потребител, свързан с нея.

Заключение

Фабриките на Laravel са мощен инструмент за генериране на реалистични тестови данни, което прави тестовете ви по-стабилни, а процеса на разработка – по-бърз. Като използвате фабрични шаблони, можете да създавате варианти на модели, да симулирате различни потребителски поведения и да посявате бази данни с лекота. Разбирането на това как да използвате състояния, връзки и генериране на потребителски данни с фабриките на Laravel значително ще подобри работния процес на тестовете и разработката ви. Успешно кодиране!

Изпробвайте уменията си за всички наши хостинг услуги и получете 15% отстъпка!

Използвайте код на касата:

Skills