drfraker / snipe-migrations
为 Laravel 测试提供快速数据库迁移。
v1.4.0
2021-06-08 08:38 UTC
Requires
- php: ^7.1|^8.0
Requires (Dev)
- orchestra/testbench: ^3.7
- php-mock/php-mock-mockery: ^1.3
- phpunit/phpunit: ^8.0
README
Snipe Migrations
为 Laravel 测试提供快速数据库迁移。
该软件包对您的 mysql 数据库进行快照,并将模式导入到测试数据库,而不是在测试套件启动时运行所有迁移。
如果您有一个包含许多迁移文件的复杂项目,这个过程可以在初始化测试套件时为您提供巨大的速度提升。该软件包可以用作 Laravel 自带的 RefreshDatabase 特性的替代品。
例如,我们对一个应用进行了测试,该应用使用 RefreshDatabase 运行所有迁移需要大约 4 秒钟。使用 SnipeMigrations,测试启动时间缩短到 200 毫秒。
要求
- Laravel >= 5.5
- PHP >= 7.1
- MySql 或 MariaDb,需要为测试单独的数据库。
- 例如,如果您有一个名为
amazingapp
的开发数据库,您将创建一个名为amazingapp_test
的测试数据库,并在您的 phpunit.xml 文件中添加数据库的详细信息。amazingapp_test
是 Snipe 将为您同步的数据库。
- 例如,如果您有一个名为
安装
使用 composer 需求此软件包。
composer require --dev drfraker/snipe-migrations
使用方法
通过 composer 安装完软件包后
- 将
SnipeMigrations
特性添加到您的tests/TestCase
文件中。别忘了在文件顶部导入类。一旦添加了SnipeMigrations
特性,您只需在任何希望使用数据库访问的测试中使用 RefreshDatabase 特性,Snipe 会为您处理剩余的工作。
完成时,您的 tests/TestCase.php
文件应如下所示。
<?php namespace Tests; use Drfraker\SnipeMigrations\SnipeMigrations; use Illuminate\Foundation\Testing\TestCase as BaseTestCase; abstract class TestCase extends BaseTestCase { use CreatesApplication, SnipeMigrations; }
-
默认情况下,SnipeMigrations 将在
/vendor/drfraker/snipe-migrations/snapshots
中存储.snipe
文件和snipe_snapshot.sql
文件。如果您想更改文件位置,请按照以下步骤发布 Snipe 配置文件。- 要发布 Snipe 配置文件,请运行
php artisan vendor:publish
并从列表中选择snipe-config
。
- 要发布 Snipe 配置文件,请运行
-
如果由于任何原因导致
snipe_snapshot.sql
文件不同步,您可以通过运行php artisan snipe:clear
来清除它。运行此命令后,原始数据库迁移将再次运行,创建一个新的snipe_snapshot.sql
文件。
贡献
欢迎 Pull requests。对于重大更改,请先提出一个问题以讨论您想要更改的内容。
请确保相应地更新测试。