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

Опубликовано: 2023-04-28

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

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

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

В этой статье объясняется, как получить данные о комментариях без комментариев от реальных пользователей.

Предпосылки

Для выполнения этого руководства вы должны быть знакомы со следующим:

  • XAMPP
  • Композитор

XAMPP — это бесплатный и простой в установке дистрибутив Apache, который содержит PHP, Perl и MariaDB — базу данных MySQL. В этом руководстве используется последняя версия 8.1.10, которая устанавливает PHP 8.1.10. Прочтите эту статью при установке XAMPP для MacOS или это руководство для Linux. В этом руководстве используется XAMPP в Windows.

Composer — это инструмент, который позволяет вам определять, устанавливать и загружать пакеты, от которых зависит ваше веб-приложение при разработке и производстве. В этом руководстве используется Composer версии 2.4.4, для которого требуется PHP версии 7.2+. Вы используете Composer для установки установщика Laravel для этого руководства.

Вы также можете загрузить полный код проекта, чтобы следовать ему.

Тестирование вашего приложения не должно быть запоздалой мыслью. Фабрики моделей Laravel могут помочь! Вот как ️ Нажмите, чтобы твитнуть

Как настроить проект

В этом разделе вы создадите проект Laravel и подключите его к базе данных. Давайте посмотрим на все, что влечет за собой и как это сделать.

Установить установщик Laravel

Чтобы быстро создать проект Laravel, установите установщик Laravel:

 composer global require laravel/installer

Этот код глобально устанавливает установщик Laravel на ваш компьютер.

Создать проект Laravel

Затем создайте проект Laravel, выполнив следующее:

 laravel new app-name

Этот код загружает новый проект Laravel и устанавливает все зависимости:

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

Еще один более простой способ установить Laravel — напрямую использовать Composer.

 composer create-project laravel/laravel app-name

Вам не нужно устанавливать установщик Laravel при использовании описанного выше метода.

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

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

 php artisan serve

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

Домашняя страница сайта Laravel
Ларавель

Создать базу данных

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

Форма создания базы данных в PHPMyAdmin
Создать форму базы данных

На изображении выше показана форма «Создать базу данных» с app_name в качестве имени базы данных.

Щелкните Создать , чтобы создать базу данных.

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

Файл модели комментария
Файл модели комментария

Создайте файл миграции

После создания файла модели и объявления массива $fillable необходимо создать файл миграции с помощью приведенной ниже команды:

 php artisan make:migration create_comments_table

Примечание. Соглашение об именовании для создания миграций в Laravel обычно — snake_case , также известное как underscore_case . Первое слово — действие, второе слово — множественное число модели, а последнее слово — функция, которая создается внутри проекта. Это означает, что вы будете писать create_books_table при создании миграции для модели Book.

Этот код создает файл с именем yyyy_mm_dd_hhmmss_create_comments_table внутри папки базы данных/миграции .

Затем отредактируйте функцию 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

Эта команда запускает все миграции внутри базы данных/миграций , потому что это первая миграция с момента создания приложения:

Успешные миграции
Успешные миграции

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

База данных после миграций
БД после миграций

Создайте файл 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

Подключите модель комментария к CommentFactory

Свяжите модель Comment с CommentFactory , объявив защищенную переменную $model над определением:

 protected $model = Comment::class;

Также добавьте use App\Models\Comment; к файловым зависимостям. Теперь файл CommentFactory должен выглядеть так:

Файл CommentFactory
Файл CommentFactory

Как заполнить базу данных

Заполнение в программировании означает создание случайных поддельных данных для базы данных в целях тестирования.

Теперь, когда вы создали модель, запустили миграции и создали определение в CommentFactory, запустите сидер, используя файл DatabaseSeeder .

Создайте файл CommentSeeder

Создайте файл сеялки , который использует factory для генерации данных:

 php artisan make:seeder CommentSeeder.php

Этот код создает файл CommentSeeder .php внутри папки database/seeders .

Отредактируйте функцию запуска

Подключите модель Comment к CommentSeeder. Добавьте следующий код внутрь функции запуска:

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

Этот код указывает CommentSeeder использовать модель Comment и функцию определения CommentFactory для создания 50 комментариев внутри базы данных. Также добавьте use App\Models\Comment; к файловым зависимостям. Теперь файл CommentSeeder должен выглядеть так:

Файл CommentSeeder
Файл сеялки комментария

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

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

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

 php artisan db:seed --class=CommentSeeder

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

Исходное значение базы данных успешно
Исходное значение базы данных успешно

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

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

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

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

Используйте Обновить базу данных

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

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

 use RefreshDatabase;

Файл ExampleTest.php теперь должен выглядеть так:

Файл ExampleTest
ПримерТестовый файл

Запустить тест

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

 php artisan test

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

Успешный тест Artisan
Успешный тест Artisan

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

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

Краткое содержание

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

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

Когда ваше приложение Laravel будет готово к развертыванию, вы можете быстро и эффективно сделать это в службах хостинга приложений Kinsta.