pristavu / laravel-fast-refresh-database
比以往任何时候都快地刷新您的数据库 🚀
Requires
- php: ^8.1
- symfony/process: ^5.0|^6.0|^7
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.13
- pestphp/pest: ^1.22|^2
- phpunit/phpunit: ^9.4|^10.5
- symfony/var-dumper: ^6.2|^7
README
您是否遇到过传统 RefreshDatabase 特性在拥有大量迁移时运行测试花费很长时间的问题?如果是这样的话,您可能需要这个包!
问题
传统上,每次运行测试时,RefreshDatabase 特性都会运行 php artisan migrate:fresh。在第一次测试之后,它将使用事务回滚数据并运行下一个测试,因此后续测试很快,但初始测试很慢。如果您习惯于运行单个测试,这可能会非常烦人,因为运行单个测试可能需要几秒钟。
解决方案
您不需要每次运行测试时都运行 php artisan migrate:fresh,只有在添加新迁移或更改旧迁移时才需要。FastRefreshDatabase 特性将创建您的 migrations 文件夹以及当前 Git 分支的校验和。然后,它将在您的应用程序的 storage/app 目录中创建一个校验和文件。当您的迁移更改或分支更改时,校验和将不会匹配缓存的校验和,并将运行 php artisan migrate:fresh。
如果您没有进行任何更改,它将继续使用相同的数据库而无需刷新,这可以将测试时间加快 100 倍!
基准测试
运行单个测试,大约有 400 个迁移。
安装
使用 Composer 安装此包
composer require plannr/laravel-fast-refresh-database --dev
添加到您的 TestCase
接下来,只需将您在 TestCase 文件中使用的现有 RefreshDatabase 特性替换为 FastRefreshDatabase 特性即可
<?php namespace Tests; use Illuminate\Foundation\Testing\TestCase as BaseTestCase; -use Illuminate\Foundation\Testing\RefreshDatabase; +use Plannr\Laravel\FastRefreshDatabase\Traits\FastRefreshDatabase; abstract class TestCase extends BaseTestCase { use CreatesApplication; - use RefreshDatabase; + use FastRefreshDatabase; }
使用 Pest
只需替换 Pest.php 文件中的 uses 行
-use Illuminate\Foundation\Testing\RefreshDatabase; +use Plannr\Laravel\FastRefreshDatabase\Traits\FastRefreshDatabase; -uses(RefreshDatabase::class)->in(__DIR__); uses(FastRefreshDatabase::class)->in('Feature');
删除迁移校验和
有时您可能希望强制更新数据库迁移,为此,在 storage/app 中找到 migration-checksum_{Database Name Slug}.txt 文件。
自定义校验和文件位置
您可以通过扩展特性并覆盖 getMigrationChecksumFile() 方法来自定义迁移校验和文件位置和名称。
protected function getMigrationChecksumFile(): string { return storage_path('custom/some-other-file.txt'); }
ParaTest 数据库
并行测试数据库包含作为每个测试运行器唯一标识符的令牌。这使得特性能够在不额外努力的情况下天然支持并行测试,因为数据库名称存储在校验和文件名中。