Как генерировать и использовать искусственные записи с помощью фабрик моделей Laravel

Как генерировать и использовать искусственные записи с помощью фабрик моделей Laravel

Содержание
  1. Необходимые условия
  2. Как настроить проект
    1. Установите инсталлятор Laravel
    2. Создание проекта Laravel
    3. Создание проекта Laravel
    4. Запуск приложения
    5. Создание базы данных
    6. Редактирование файла .env
  3. Как сгенерировать фальшивые данные
    1. Создание модели комментариев
    2. Создание файла миграции
    3. Запуск миграций
    4. Создание файла-фабрики CommentFactory
    5. Функция определения
    6. Подключение модели Comment к CommentFactory
  4. Как засеять базу данных
    1. Создание файла CommentSeeder
    2. Редактирование функции Run
    3. Запуск сеялки
  5. Как сбросить базу данных
    1. Использование RefreshDatabase
    2. Запуск теста
  6. Успешное тестирование Artisan
  7. Резюме

Тестирование является неотъемлемой частью веб-разработки. Фабрики моделей 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

Создание проекта Laravel

Другой более простой способ установки Laravel - использовать Composer напрямую.

composer create-project laravel/laravel app-name

При использовании описанного выше способа установка инсталлятора Laravel не требуется.

Запуск приложения

Теперь можно изменить каталог на app-name и запустить проект с помощью собственного инструмента интерфейса командной строки (CLI) Laravel, Artisan:

php artisan serve

Этот код запускает проект и подключает его к localhost:8000 или любому другому доступному порту, если порт 8000 используется. На localhost:8000 вы должны увидеть нечто подобное:

Главная страница сайта Laravel
Главная страница сайта Laravel

Создание базы данных

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

Форма "Создание базы данных" в PHPMyAdmin
Форма "Создание базы данных" в PHPMyAdmin

На рисунке выше показана форма 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
Файл 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 должен выглядеть следующим образом:

Файл CommentSeeder
Файл CommentSeeder

Примечание: Вы можете настроить Faker на создание локальных данных. Например, можно настроить его на генерацию итальянских имен вместо случайных, задав в файле app/config.php параметр faker_locale равным it_IT. Подробнее о локалях Faker можно прочитать в этом руководстве.

Запуск сеялки

Далее запустите файл сеялки с помощью Artisan:

php artisan db:seed --class=CommentSeeder

Этот код запускает файл-сеялку и генерирует в базе данных 50 строк фальшивых данных.

Успешное засеивание базы данных
Успешное засеивание базы данных

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

50 строк данных в базе данных
50 строк данных в базе данных

Как сбросить базу данных

При использовании сгенерированных данных для тестирования необходимо сбрасывать базу данных при каждом запуске теста. Предположим, необходимо протестировать функцию переключения одобренных комментариев. Обновляйте базу данных после каждого теста, чтобы ранее сгенерированные данные не мешали проведению будущих тестов.

Использование RefreshDatabase

Обновите базу данных с помощью свойства RefreshDatabase внутри тестового файла.

Перейдите в файл ExampleTest.php в папке tests/Feature к комментарию use Illuminate\Foundation\Testing\RefreshDatabase; и добавьте следующую строку кода над функцией test_the_application_returns_a_successful_response:

use RefreshDatabase;

Теперь файл ExampleTest.php должен выглядеть следующим образом:

Файл ExampleTest
Файл ExampleTest

Запуск теста

После добавления свойства RefreshDatabase в тестовый файл запустите тест с помощью Artisan:

php artisan test

Этот код запускает все тесты в приложении и обновляет базу данных после выполнения тестов, как показано на рисунке ниже:

Успешное испытание ремесленника
Успешное испытание ремесленника

Успешное тестирование Artisan

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

Пустая база комментариев
Пустая база комментариев

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

Резюме

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

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