pristavu/laravel-fast-refresh-database

比以往任何时候都快地刷新您的数据库 🚀

2.0.0 2024-03-28 23:51 UTC

This package is auto-updated.

Last update: 2024-09-29 00:57:24 UTC


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 数据库

并行测试数据库包含作为每个测试运行器唯一标识符的令牌。这使得特性能够在不额外努力的情况下天然支持并行测试,因为数据库名称存储在校验和文件名中。