Содержание
Тестирование является неотъемлемой частью веб-разработки. Фабрики моделей Laravel определяют записи в базе данных предсказуемым и легко воспроизводимым образом, что позволяет обеспечить последовательность и контроль при тестировании приложений. Фабрики моделей определяют набор атрибутов по умолчанию для каждой из ваших моделей Eloquent.
Например, если вы создаете приложение для ведения блогов, позволяющее авторам и модераторам утверждать комментарии до их публикации, вам необходимо проверить, правильно ли работает эта функция, прежде чем развернуть ее для пользователей. Для всего этого необходимы тестовые данные.
Для тестирования описанного выше приложения для ведения блога необходимы данные о комментариях для имитации и проверки работоспособности приложения. Laravel позволяет сделать это без получения комментариев от реальных пользователей, используя фабрики Laravel и Faker для генерации поддельных данных.
В этой статье рассказывается о том, как получить данные о комментариях без комментариев реальных пользователей.
Необходимые условия
Для выполнения данного руководства необходимо знать следующее:
- XAMPP
- Composer
XAMPP - это бесплатный и простой в установке дистрибутив Apache, содержащий PHP, Perl и MariaDB - базу данных MySQL. В данном руководстве используется последняя версия, 8.1.10, которая устанавливает PHP 8.1.10. В данном руководстве используется XAMPP под Windows.
Composer - это инструмент, позволяющий определять, устанавливать и загружать пакеты, от которых зависит ваше веб-приложение в процессе разработки и производства. В данном руководстве используется версия Composer v2.4.4, для которой требуется PHP версии 7.2+. Для установки инсталлятора Laravel в этом руководстве используется Composer.
Вы также можете загрузить полный код проекта, чтобы следовать за ним.
Тестирование приложения не должно быть чем-то второстепенным. В этом может помочь Laravel Model factories!
Как настроить проект
В этом разделе вы создадите проект Laravel и подключите его к базе данных. Давайте рассмотрим, что из этого следует и как это сделать.
Установите инсталлятор Laravel
Чтобы быстро создать проект Laravel, установите инсталлятор Laravel:
composer global require laravel/installer
Этот код устанавливает инсталлятор Laravel глобально на вашу машину.
Создание проекта Laravel
Далее создайте проект Laravel, выполнив следующие действия:
laravel new app-name
Этот код загружает новый проект Laravel и устанавливает все зависимости:

Создание проекта Laravel
Другой более простой способ установки Laravel - использовать Composer напрямую.
composer create-project laravel/laravel app-name
При использовании описанного выше способа установка инсталлятора Laravel не требуется.
Запуск приложения
Теперь можно изменить каталог на app-name и запустить проект с помощью собственного инструмента интерфейса командной строки (CLI) Laravel, Artisan:
php artisan serve
Этот код запускает проект и подключает его к localhost:8000 или любому другому доступному порту, если порт 8000 используется. На localhost:8000 вы должны увидеть нечто подобное:

Создание базы данных
Для подключения приложения к базе данных необходимо создать новую базу данных с помощью графического интерфейса XAMPP PHPMyAdmin. Перейдите по адресу localhost/phpmyadmin и нажмите кнопку New на боковой панели:

На рисунке выше показана форма Create Database с именем базы данных app_name.
Нажмите кнопку Create для создания базы данных.
Редактирование файла .env
Чтобы подключить приложение к базе данных, необходимо отредактировать часть DB файла .env:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=app_name
DB_USERNAME=root
DB_PASSWORD=
Этот код заполняет учетные данные базы данных именем базы данных, именем пользователя, портом, паролем и хостом. Теперь можно приступать к созданию фабрик и моделей.
Примечание: Замените значения на свои учетные данные базы данных. Кроме того, если вы столкнетесь с ошибкой ”Доступ запрещен для пользователя”, заключите значения DB_USERNAME и DB_PASSWORD в двойные кавычки.
Как сгенерировать фальшивые данные
После создания приложения и подключения его к базе данных можно создать необходимые файлы для генерации фальшивых данных в базе.
Создание модели комментариев
Создайте файл модели для взаимодействия с таблицами базы данных. Для создания модели используйте программу Artisan:
php artisan make:model Comment
Этот код создает файл Comment.php в папке app/Models с некоторым шаблонным кодом. Добавьте следующий код ниже строки use HasFactory;:
protected $fillable = [
'name',
'email',
'body',
'approved',
'likes'
];
В этом коде перечислены поля, для которых необходимо разрешить массовые назначения, поскольку по умолчанию Laravel защищает базу данных от массовых назначений. Теперь файл модели Comment должен выглядеть следующим образом:

Создание файла миграции
После создания файла модели и объявления массива $fillable необходимо создать файл миграции с помощью приведенной ниже команды:
php artisan make:migration create_comments_table
Примечание: Для создания миграций в Laravel обычно используется именование snake_case, также известное как underscore_case. Первое слово - это действие, второе слово - множественное число модели, а последнее слово - функция, которая создается внутри проекта. Это означает, что при создании миграции для модели Book вы напишете create_books_table.
Этот код создает файл с именем yyyy_mm_dd_hhmmss_create_comments_table внутри папки database/migrations.
Далее отредактируйте функцию up внутри yyyy_mm_dd_hhmmss_create_comments_table:
public function up()
{
Schema::create('comments', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email');
$table->longText('body');
$table->boolean('approved');
$table->integer('likes')->default(0);
$table->timestamps();
});
}
Этот код создает схему, в которой создается таблица со столбцами: id, name, email, body, approved, likes и timestamps.
Запуск миграций
Создание и редактирование файла миграций ничего не даст, пока вы не запустите их с помощью командной строки. Если посмотреть на менеджер базы данных, то он по-прежнему пуст.
Запустите миграции с помощью программы Artisan:
php artisan migrate
Эта команда запускает все миграции внутри database/migrations, поскольку это первая миграция с момента создания приложения:

На следующем изображении показаны все запущенные файлы миграции. Каждый из них представляет собой таблицу в базе данных:

Создание файла-фабрики CommentFactory
Создайте файл-фабрику, содержащий вашу функцию определения. Для этой демонстрации вы создадите фабрику с помощью Artisan:
php artisan make:factory CommentFactory.php
Этот код создает файл CommentFactory.php в папке database/factories.
Функция определения
Функция внутри CommentFactory определяет, как Faker генерирует фальшивые данные. Отредактируйте ее так, чтобы она выглядела следующим образом:
public function definition()
{
return [
'name' => $this->faker->name(),
'email' => $this->faker->email(),
'body' => $this->faker->sentence(45),
'approved' => $this->faker->boolean(),
'likes' => $this->faker->randomNumber(5)
];
}
Этот код указывает Faker’у на необходимость сгенерировать следующее:
Имя Адрес электронной почты Абзац, содержащий 45 предложений Утверждаемое значение, которое может быть только истинным или ложным Случайное число от 0 до 9999
Подключение модели Comment к CommentFactory
Свяжите модель Comment с CommentFactory, объявив над определением защищенную переменную $model:
protected $model = Comment::class;
Также добавьте в зависимости от файла параметр use App\Models\Comment;. Теперь файл CommentFactory должен выглядеть следующим образом:

Как засеять базу данных
Под посевом в программировании понимается генерация случайных поддельных данных для базы данных в целях тестирования.
Теперь, когда вы создали модель, запустили миграции и создали определение внутри CommentFactory, запустите сеялку с помощью файла DatabaseSeeder.
Создание файла CommentSeeder
Создайте файл посевного материала, который использует фабрику для генерации данных:
php artisan make:seeder CommentSeeder.php
Этот код создает файл CommentSeeder.php в папке database/seeders.
Редактирование функции Run
Подключите модель Comment к CommentSeeder. Добавьте следующий код в функцию run:
Comment::factory()->count(50)->create();
Этот код указывает CommentSeeder’у использовать модель Comment и функцию определения CommentFactory для генерации 50 комментариев в базе данных. Также добавьте в зависимости от файла параметр use App\Models\Comment;. Теперь файл CommentSeeder должен выглядеть следующим образом:

Примечание: Вы можете настроить Faker на создание локальных данных. Например, можно настроить его на генерацию итальянских имен вместо случайных, задав в файле app/config.php параметр faker_locale равным it_IT. Подробнее о локалях Faker можно прочитать в этом руководстве.
Запуск сеялки
Далее запустите файл сеялки с помощью Artisan:
php artisan db:seed --class=CommentSeeder
Этот код запускает файл-сеялку и генерирует в базе данных 50 строк фальшивых данных.

Теперь в базе данных должно быть 50 строк фальшивых данных, которые можно использовать для тестирования функций приложения:

Как сбросить базу данных
При использовании сгенерированных данных для тестирования необходимо сбрасывать базу данных при каждом запуске теста. Предположим, необходимо протестировать функцию переключения одобренных комментариев. Обновляйте базу данных после каждого теста, чтобы ранее сгенерированные данные не мешали проведению будущих тестов.
Использование RefreshDatabase
Обновите базу данных с помощью свойства RefreshDatabase внутри тестового файла.
Перейдите в файл ExampleTest.php в папке tests/Feature к комментарию use Illuminate\Foundation\Testing\RefreshDatabase; и добавьте следующую строку кода над функцией test_the_application_returns_a_successful_response:
use RefreshDatabase;
Теперь файл ExampleTest.php должен выглядеть следующим образом:

Запуск теста
После добавления свойства RefreshDatabase в тестовый файл запустите тест с помощью Artisan:
php artisan test
Этот код запускает все тесты в приложении и обновляет базу данных после выполнения тестов, как показано на рисунке ниже:

Успешное тестирование Artisan
Теперь проверьте базу данных на наличие пустой таблицы комментариев:

Ручной ввод данных остался в прошлом! Автоматизируйте тестирование приложений с помощью фабрик моделей Laravel.
Резюме
В этой статье мы рассмотрели, как создать проект Laravel, подключить его к базе данных, создать и настроить модели, миграцию, фабрику и файлы-сеялки для генерации случайных данных для базы данных. Также было рассмотрено, как сбросить базу данных после выполнения тестов.
Теперь вы убедились, что фабрики Laravel и Faker позволяют за считанные минуты сгенерировать любое количество тестовых данных для тестирования приложения или даже в качестве заполнителя - с минимальной конфигурацией.