2.xから3.xへのアップグレード

推定アップグレード時間:2分

私たちはすべての潜在的な破壊的変更を文書化するよう努めていますが、これらの変更の一部は、フレームワークであまり使用されないセクションに存在する可能性があります。そのため、これらの変更のサブセットのみがアプリケーションに影響を与える可能性があります。

依存関係の更新

影響の可能性:高

Pest 3では、PHP 8.2.0以降が必要です。Pest 2からPest 3への移行を開始するには、アプリケーションの`composer.json`ファイルで`pestphp/pest`の依存関係を`^3.0`に更新してください。

1- "pestphp/pest": "^2.0",
2+ "pestphp/pest": "^3.0",

さらに、Laravelを使用している場合は、Collisionをバージョン8にアップグレードしてください。Laravel 11が必要になります。

1- "nunomaduro/collision": "^7.0",
2+ "nunomaduro/collision": "^8.0",

Pestがメンテナンスしている他のすべてのプラグインは、アプリケーションの`composer.json`ファイルでバージョン`^3.0`に更新する必要があります。

1- "pestphp/pest-plugin-laravel": "^2.0",
2+ "pestphp/pest-plugin-laravel": "^3.0",

PHPUnit 11の変更点

影響の可能性:中

Pest 3はPHPUnit 11上に構築されています。これは、PHPUnit 11に加えられた注目すべき変更がテストスイートに影響を与える可能性があることを意味します。PHPUnit 11で導入されたすべての変更点を調べるには、PHPUnit 11の変更ログを参照してください。

`toHaveMethod`と`toHaveMethods`の期待値

影響の可能性:低

`toHaveMethod`と`toHaveMethods`の期待値は、`toHaveMethod`と`toHaveMethods`のアーキテクチャ期待値に置き換えられました。これらの期待値を使用していた場合、アーキテクチャ期待値は名前空間またはクラス名を期待するため、オブジェクトを提供できなくなりました。

1-expect($object)->toHaveMethod('method');
2+expect($object::class)->toHaveMethod('method');

`pest()`

Pest 2の非推奨

Pest 2のリリース中に、一部の機能が非推奨となり、Pest 3では削除されました。注意すべき変更点は次のとおりです。

`tap()`メソッド

影響の可能性:低

高階テストを実行する場合、実行時に遅延評価が必要なオブジェクトに対してアサーションを呼び出すために`tap()`メソッドを使用していた可能性があります。Pest 2では、`tap()`メソッドは非推奨となり、Pest 3では削除されました。代わりに、`defer()`メソッドを使用する必要があります。

1it('creates admins')
2- ->tap(fn () => $this->artisan('user:create --admin'))
3+ ->defer(fn () => $this->artisan('user:create --admin'))
4 ->assertDatabaseHas('users', ['id' => 1]);

1.xから2.xへのアップグレード

推定アップグレード時間:2分

私たちはすべての潜在的な破壊的変更を文書化するよう努めていますが、これらの変更の一部は、フレームワークであまり使用されないセクションに存在する可能性があります。そのため、これらの変更のサブセットのみがアプリケーションに影響を与える可能性があります。

依存関係の更新

影響の可能性:高

Pest 2では、PHP 8.1.0以降が必要です。Pest 1からPest 2への移行を開始するには、アプリケーションの`composer.json`ファイルで`pestphp/pest`の依存関係を`^2.0`に更新してください。

1- "pestphp/pest": "^1.22",
2+ "pestphp/pest": "^2.0",

次に、PHPUnitが依存関係に含まれている場合は、削除できます。

1- "phpunit/phpunit": "^9.5.10",

さらに、Laravelを使用している場合は、Collisionをバージョン7にアップグレードしてください。Laravel 10が必要になります。

1- "nunomaduro/collision": "^6.0",
2+ "nunomaduro/collision": "^7.0",

Parallel Plugin(またはParatest)を使用している場合は、Pestにデフォルトで含まれるようになったため、依存関係から削除できます。

1- "brianium/paratest": "^6.8.1",
2- "pestphp/pest-plugin-parallel": "^1.2.1",

Global Assertions Pluginはアーカイブされており、依存関係から削除する必要があります。

1- "pestphp/pest-plugin-global-assertions": "^1.0.0",

Global Assertions Pluginに依存していた場合は、`$this`変数を使用して同じ基盤となるアサーションにアクセスできます。または、期待値APIに移行することもできます。

1test('sum', function () {
2 $result = sum(1, 2);
3 
4- assertSame(3, $result);
5+ $this->assertSame(3, $result); // or expect($result)->toBe(3)
6});

Pestがメンテナンスしている他のすべてのプラグインは、アプリケーションの`composer.json`ファイルでバージョン`^2.0`に更新する必要があります。

1- "pestphp/pest-plugin-laravel": "^1.4",
2+ "pestphp/pest-plugin-laravel": "^2.0",

Faker Pluginを使用している場合、`faker()`関数は`fake()`に名前が変更されました。すべての使用箇所を更新する必要があります。

1- use function Pest\Faker\faker;
2+ use function Pest\Faker\fake;
3 
4test('faker', function () {
5- expect(faker()->name())->toBeString();
6+ expect(fake()->name())->toBeString();
7});

PHPUnit 10の変更点

影響の可能性:中

以前にPestの代わりにPHPUnitを使用していた場合、`phpunit.xml`ファイルを更新する必要がある可能性があります。この場合、Pest 2を初めて実行すると、次のメッセージが表示されることがあります。

1WARN Your XML configuration validates against a deprecated schema. Migrate your XML configuration using "--migrate-configuration"!

この問題に対処するには、`--migrate-configuration`オプションを指定してPestを再実行してください。

1./vendor/bin/pest --migrate-configuration

Pest 2はPHPUnit 10上に構築されています。これは、PHPUnit 10に加えられた注目すべき変更がテストスイートに影響を与える可能性があることを意味します。PHPUnit 10で導入されたすべての変更点を調べるには、PHPUnit 10の変更ログを参照してください。

高階テスト

影響の可能性:低

高階テストを実行する場合、実行時に遅延評価が必要なオブジェクトに対してアサーションを呼び出すために`tap()`メソッドを使用していた可能性があります。Pest 2では、`tap()`メソッドは非推奨となりました。代わりに、`defer()`メソッドを使用する必要があります。

1it('creates admins')
2- ->tap(fn () => $this->artisan('user:create --admin'))
3+ ->defer(fn () => $this->artisan('user:create --admin'))
4 ->assertDatabaseHas('users', ['id' => 1]);

データセット

バインドされたデータセット

影響の可能性:非常に低い

「バインドされた」データセットを利用し、単一のデータセット引数をバインドしている場合、対応するテストパラメータの型を指定する必要があります。

1-it('can generate the full name of a user', function ($user, $fullName) {
2+it('can generate the full name of a user', function (User $user, $fullName) {
3 expect($user->full_name)->toBe($fullName);
4})->with([
5 [fn() => User::factory()->create(['first_name' => 'Nuno', 'last_name' => 'Maduro']), 'Nuno Maduro'],
6 [fn() => User::factory()->create(['first_name' => 'Luke', 'last_name' => 'Downing']), 'Luke Downing'],
7 [fn() => User::factory()->create(['first_name' => 'Freek', 'last_name' => 'Van Der Herten']), 'Freek Van Der Herten'],
8]);

スコープ付きデータセット

影響の可能性:非常に低い

Pest 1では、`tests/Pest.php`または`tests/Datasets.php`ファイルで`dataset`関数を使用してデータセットを宣言することのみをドキュメント化していましたが、実際にはテストスイート内の任意のテストファイルでデータセットを宣言できました。ただし、Pest 2では、スコープ付きデータセットの導入により、テストファイルで宣言されたデータセットは、その同じテストファイル内でのみ利用できます。したがって、グローバルにアクセスする必要があるデータセットがある場合は、`tests/Pest.php`または`tests/Datasets.php`ファイルに配置されていることを確認してください。


これでPest 2のアップグレードガイドは終わりです。次の章では、PHPUnitからPestにテストを簡単に移行する方法について説明します。PHPUnitからの移行