Как создавать и использовать поддельные записи с фабриками моделей 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:
composer global require laravel/installer
Этот код глобально устанавливает установщик Laravel на ваш компьютер.
Создать проект Laravel
Затем создайте проект Laravel, выполнив следующее:
laravel new app-name
Этот код загружает новый проект Laravel и устанавливает все зависимости:
Еще один более простой способ установить Laravel — напрямую использовать Composer.
composer create-project laravel/laravel app-name
Вам не нужно устанавливать установщик Laravel при использовании описанного выше метода.
Запустите приложение
Теперь вы можете изменить каталог на имя приложения и запустить проект с помощью собственного инструмента интерфейса командной строки (CLI) Laravel, Artisan:
php artisan serve
Этот код запускает проект и подключает его к localhost:8000 или любому другому доступному порту, если порт 8000 используется. На localhost:8000 вы должны увидеть что-то вроде этого:
Создать базу данных
Чтобы подключить ваше приложение к базе данных, вы должны создать новую базу данных с помощью графического пользовательского интерфейса XAMPP PHPMyAdmin. Перейдите в localhost/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, запустите сидер, используя файл 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 должен выглядеть так:
Примечание. Вы можете настроить Faker для создания локальных данных. Например, вы можете настроить генерацию итальянских имен вместо случайных, установив для faker_locale
внутри файла app/config.php значение it_IT
. Вы можете прочитать больше о Faker Locales в этом руководстве.
Запустите сеялку
Затем запустите файл сеялки с помощью Artisan:
php artisan db:seed --class=CommentSeeder
Этот код запускает файл сеялки и генерирует 50 строк поддельных данных в базе данных.
Теперь в базе данных должно быть 50 строк поддельных данных, которые вы можете использовать для проверки функций вашего приложения:
Как сбросить базу данных
При использовании сгенерированных данных для тестирования сбрасывайте базу данных каждый раз при запуске теста. Предположим, вы хотите протестировать функцию переключения одобренных комментариев. Обновляйте базу данных после каждого теста, чтобы ранее сгенерированные данные не мешали будущим тестам.
Используйте Обновить базу данных
Обновите базу данных, используя трейт RefreshDatabase
внутри тестового файла.
Перейдите к ExampleTest.php внутри папки test/Feature , чтобы use Illuminate\Foundation\Testing\RefreshDatabase;
и добавьте следующую строку кода над функцией test_the_application_returns_a_successful_response
:
use RefreshDatabase;
Файл ExampleTest.php теперь должен выглядеть так:
Запустить тест
После добавления трейта RefreshDatabase
в тестовый файл запустите тест с помощью Artisan:
php artisan test
Этот код запускает все тесты в приложении и обновляет базу данных после тестов, как показано на изображении ниже:
Теперь проверьте базу данных, чтобы увидеть пустую таблицу комментариев:
Краткое содержание
В этой статье рассказывается, как создать проект Laravel, подключить его к базе данных, а также создать и настроить модели, миграцию, фабрику и файлы сеялки для генерации случайных данных для базы данных. Также обсуждалось, как сбросить базу данных после выполнения тестов.
Теперь вы видели, как Laravel Factory и Faker упрощают создание любого количества тестовых данных за считанные минуты для тестирования приложения или даже в качестве заполнителя — с минимальной конфигурацией.
Когда ваше приложение Laravel будет готово к развертыванию, вы можете быстро и эффективно сделать это в службах хостинга приложений Kinsta.