如何使用 Laravel 模型工厂生成和使用假记录
已发表: 2023-04-28测试对于 Web 开发至关重要。 Laravel 模型工厂以可预测且易于复制的方式定义数据库记录,以便您的应用程序测试保持一致和可控。 模型工厂为每个 Eloquent 模型定义了一组默认属性。
例如,如果您正在制作一个允许作者和版主在评论上线前批准评论的博客应用程序,您需要在将其部署给用户之前测试该功能是否正常工作。 这一切都需要测试数据。
要测试上述博客应用程序,您需要评论数据来模拟和测试您的应用程序的功能。 Laravel 允许您通过使用 Laravel 工厂和 Faker 来生成虚假数据,而无需从实际用户那里获得评论。
本文介绍如何在没有真实用户评论的情况下获取评论数据。
先决条件
要完成本教程,您必须熟悉以下内容:
- XAMPP
- 作曲家
XAMPP 是一种免费且易于安装的 Apache 发行版,其中包含 PHP、Perl 和 MariaDB(一种 MySQL 数据库)。 本教程使用最新版本 8.1.10,它安装 PHP 8.1.10。 如果为 MacOS 安装 XAMPP 或为 Linux 安装本指南,请阅读这篇文章。 本教程在 Windows 上使用 XAMPP。
Composer 是一种工具,允许您定义、安装和下载您的 Web 应用程序在开发和生产中所依赖的包。 本教程使用 Composer v2.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 安装程序。
启动应用程序
您现在可以将目录更改为app-name并使用 Laravel 自己的命令行界面 (CLI) 工具 Artisan 启动项目:
php artisan serve
此代码启动项目并将其连接到 localhost:8000 或任何其他可用端口(如果正在使用端口 8000)。 在 localhost:8000 上,您应该看到如下内容:
创建数据库
要将您的应用程序连接到数据库,您必须使用 XAMPP 的 PHPMyAdmin 图形用户界面创建一个新数据库。 转到localhost/phpmyadmin并单击侧边栏上的新建:
上图显示了以app_name作为数据库名称的创建数据库表单。
单击“创建”以创建数据库。
编辑 .env 文件
要将您的应用程序连接到数据库,您必须编辑.env文件的 DB 部分:
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
此代码使用一些样板代码在app/M models文件夹中创建一个Comment.php文件。 在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
。
此代码在database/migrations文件夹中创建一个名为yyyy_mm_dd_hhmmss_create_comments_table的文件。
接下来,编辑yyyy_mm_dd_hhmmss_create_comments_table中的 up 函数:
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
此代码在database/factories文件夹中创建一个CommentFactory .php文件。
定义函数
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个句子的段落
- 只能为 true 或 false 的批准值
- 0 到 9999 之间的随机数
将评论模型连接到 CommentFactory
通过在定义上方声明受保护的$model
变量,将Comment
模型链接到CommentFactory
:
protected $model = Comment::class;
另外,添加use App\Models\Comment;
到文件依赖项。 CommentFactory文件现在应该如下所示:
如何播种数据库
编程中的播种意味着为数据库生成随机的假数据以进行测试。
现在您已经创建了模型、运行迁移并在 CommentFactory 中创建了定义,接下来使用DatabaseSeeder文件运行播种器。
创建 CommentSeeder 文件
创建一个使用工厂生成数据的种子文件:
php artisan make:seeder CommentSeeder.php
此代码在database/seeders文件夹中创建一个CommentSeeder .php文件。
编辑运行函数
将 Comment 模型连接到 CommentSeeder。 在运行函数中添加以下代码:
Comment::factory()->count(50)->create();
此代码告诉 CommentSeeder 使用 Comment 模型和 CommentFactory 的定义函数在数据库中生成 50 条评论。 另外,添加use App\Models\Comment;
到文件依赖项。 CommentSeeder文件现在应该如下所示:
注意:你可以配置 Faker 来创建本地数据。 例如,您可以通过将app/config.php文件中的faker_locale
设置为it_IT
来将其设置为生成意大利语名称而不是随机名称。 你可以在本指南中阅读更多关于 Faker Locales 的信息。
运行播种机
接下来,使用 Artisan 运行种子文件:
php artisan db:seed --class=CommentSeeder
此代码运行种子文件并在数据库中生成 50 行假数据。
数据库现在应该有 50 行假数据,您可以使用它们来测试应用程序的功能:
如何重置数据库
使用生成的数据进行测试时,每次运行测试时都要重置数据库。 假设您想测试已批准的评论切换功能。 每次测试后刷新数据库,以确保先前生成的数据不会干扰未来的测试。
使用刷新数据库
使用测试文件中的RefreshDatabase
特征刷新数据库。
导航到tests/Feature文件夹内的ExampleTest.php到注释use Illuminate\Foundation\Testing\RefreshDatabase;
并在test_the_application_returns_a_successful_response
函数上方添加以下代码行:
use RefreshDatabase;
ExampleTest.php文件现在应该如下所示:
运行测试
将RefreshDatabase
特征添加到测试文件后,使用 Artisan 运行测试:
php artisan test
此代码运行应用程序中的所有测试并在测试后刷新数据库,如下图所示:
现在,检查数据库以查看空的评论表:
概括
本文介绍了如何创建 Laravel 项目,将其连接到数据库,以及创建和配置模型、迁移、工厂和种子文件以为数据库生成随机数据。 它还讨论了如何在运行测试后重置数据库。
您现在已经了解了 Laravel Factories 和 Faker 如何在几分钟内轻松生成任意数量的测试数据来测试应用程序,甚至作为占位符——只需最少的配置。
当您的 Laravel 应用程序准备好部署时,您可以在 Kinsta 的应用程序托管服务上快速高效地进行部署。