drfraker/snipe-migrations

为 Laravel 测试提供快速数据库迁移。

v1.4.0 2021-06-08 08:38 UTC

This package is auto-updated.

Last update: 2024-09-08 15:49:08 UTC


README

build status StyleCI

Snipe Migrations

为 Laravel 测试提供快速数据库迁移。

该软件包对您的 mysql 数据库进行快照,并将模式导入到测试数据库,而不是在测试套件启动时运行所有迁移。

如果您有一个包含许多迁移文件的复杂项目,这个过程可以在初始化测试套件时为您提供巨大的速度提升。该软件包可以用作 Laravel 自带的 RefreshDatabase 特性的替代品。

例如,我们对一个应用进行了测试,该应用使用 RefreshDatabase 运行所有迁移需要大约 4 秒钟。使用 SnipeMigrations,测试启动时间缩短到 200 毫秒。

要求

  1. Laravel >= 5.5
  2. PHP >= 7.1
  3. MySql 或 MariaDb,需要为测试单独的数据库。
    • 例如,如果您有一个名为 amazingapp 的开发数据库,您将创建一个名为 amazingapp_test 的测试数据库,并在您的 phpunit.xml 文件中添加数据库的详细信息。amazingapp_test 是 Snipe 将为您同步的数据库。

安装

使用 composer 需求此软件包。

composer require --dev drfraker/snipe-migrations

使用方法

通过 composer 安装完软件包后

  1. 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;
}
  1. 默认情况下,SnipeMigrations 将在 /vendor/drfraker/snipe-migrations/snapshots 中存储 .snipe 文件和 snipe_snapshot.sql 文件。如果您想更改文件位置,请按照以下步骤发布 Snipe 配置文件。

    • 要发布 Snipe 配置文件,请运行 php artisan vendor:publish 并从列表中选择 snipe-config
  2. 如果由于任何原因导致 snipe_snapshot.sql 文件不同步,您可以通过运行 php artisan snipe:clear 来清除它。运行此命令后,原始数据库迁移将再次运行,创建一个新的 snipe_snapshot.sql 文件。

贡献

欢迎 Pull requests。对于重大更改,请先提出一个问题以讨论您想要更改的内容。

请确保相应地更新测试。

许可证

MIT