jhwelch / pest-plugin-laravel-migrations
一个 Pest PHP 插件,允许您使用简单直观的语法测试 Laravel 迁移。
dev-main
2024-09-24 02:05 UTC
Requires
- php: ^8.2
- laravel/framework: ^11.23
- pestphp/pest: ^3.0.0
- pestphp/pest-plugin: ^3.0.0
Requires (Dev)
- guzzlehttp/guzzle: ^7.9
- orchestra/testbench: ^9.4
- pestphp/pest-dev-tools: ^3.0.0
- spatie/invade: ^2.1
This package is auto-updated.
Last update: 2024-09-24 02:06:35 UTC
README
一个 Pest PHP 插件,允许您使用简单直观的语法测试 Laravel 迁移。
migration('2024_09_12_000000_update_users_table_combine_names', function ($up, $down) { $user = User::create([ 'first_name' => 'John', 'last_name' => 'Doe', ]); $up(); expect($user->fresh()) ->full_name->toEqual('John Doe'); $down(); expect($user->fresh()) ->first_name->toEqual('John') ->last_name->toEqual('Doe'); });
使用 Pest 和其他现代工具,测试 Laravel 应用程序的几乎每个方面都非常容易。然而,具有最大永久数据影响的地方之一仍然是未测试的。
数据库迁移。
任何给定的测试都是针对数据库的最新状态运行的。这使得测试任何执行复杂数据迁移的迁移变得困难。
此包旨在填补这一空白。
此包仍在开发中
一旦该包被标记为稳定,它将遵循 Semver,但是在这个阶段,API 不保证保持一致。
用法
此包包含两个 Pest 函数:migration
和 migrationFunctions
。
migration
migration
是编写迁移测试最直接的方式。
所有迁移都将运行到目标。然后,在 $up()
上迁移目标,并使用 $down()
回滚,允许在每个步骤中进行设置和断言。
use function JHWelch\PestLaravelMigrations\migration; migration('2024_09_12_000000_migration_name', function ($up, $down) { // Setup test Data // All migrations up until target have been run $up(); // Run Assertions after migration "up" $down(); // Run Assertions after migration "down" });
如果您仅测试迁移的 up()
部分,您可以完全省略 $down
参数。
migration('2024_09_12_000000_migration_name', function ($up) { // Setup test Data // All migrations up until target have been run $up(); // Run Assertions after migration "up" });
migrationFunctions
此函数是 migration
包裹的功能的核心,但允许更多的定制性。
它返回一个包含 $up
和 $down
Closure
的两项数组,这些 Closure
触发迁移的每一半。
使用此函数的最简单方法是解构数组。
use function JHWelch\PestLaravelMigrations\migrationFunctions; it('tests migrations', () { # Test only "up" [$up] = migrationFunctions('2024_09_12_000000_migration_name'); # Test both "up" and "down" [$up, $down] = migrationFunctions('2024_09_12_000000_migration_name'); });
更多示例
有关更实际的示例,请参阅 ExampleUsageTest.php。