🚀

PEST v3の新機能まとめ

2024/08/28に公開

Laravel 11でデフォルトのテストフレームワークになったPESTですが、
昨日2024/08/27(火)のLaracon USで PEST v3が発表されました。
発表された新機能をまとめます。

1. タスクマネジメント機能

PEST v3では、TODOを作ることができましたが、
作成したTODOをGitHubのISSUEと連携することが可能になりました。

ターミナルに表示されるリンクをクリックすると、、

紐づいたGitHubのIssueにジャンプします!

さらに、以下のように特定のアサイニーに絞ってテストを確認できます。

自分やメンバーのタスク管理に使えそうです。

2. アーキテクチャテストプリセット

PEST v2ではアーキテクチャテストを使って、デバッグコードが本番環境で使われていないか、コーディングルールが遵守されているかなどをチェックすることができました。
しかし、これらのルールは自分で定義する必要がありました。

PEST v3では、さまざまな開発チームが簡単に利用できるように、
アーキテクチャテストのプリセットが用意されるようです。

PHPプリセット

Laravelに関わらず、PHPプロジェクトで使えるプリセットが2つ

php

arch()->preset()->php()

このルールでは、PHPプロジェクトでの一般的なバッドパターンを検出します。
例: die()の使用

security

arch()->preset()->security()

このルールではPHPプロジェクトでのセキュリティ脅威のあるコードを検出します。
例:md5()eval()の使用

Laravel用プリセット

もちろん、Laravel向けのプリセットも提供されます。

arch()->preset()->laravel()

リソースコントローラーでindexshowなどのリソース操作メソッド以外のpublicメソッドが宣言されていないか、カスタムExceptionでベースExceptionを継承しているか等のLaravelに特化したチェックができるみたいです。

さらに、以下のように好みに合わせて異なるタイプのプリセットを選択可能とのこと。

arch()->preset()->strict()
arch()->preset()->relaxed()

final修飾子を強制するかどうかなどの設定が変わるみたいです。

3. ミューテーションテスト

PEST v2では、型カバレッジ・コードカバレッジを測ることでテストコードの品質を測定できましたが、例えカバレッジが100%でも充分にテストされているとは限らないという問題がありました。

例:
Controllerで$user->update(['passeord' => $newPassword])という処理があったとき、この行を消したとしてもコードカバレッジは100%のまま

PEST v3では、以下のコマンドを使ってテストしていないコードを検知することができます。

これは単純にカバレッジを測るのとは異なり、ソースコードの各行を削除したときにテストが失敗するかどうかをチェックします。
テストがしっかり書かれていれば、削除された部分に対してテストが失敗するはずです。

※ 他にもpublicなどの可視性を変えてテストが失敗するかどうかをチェックしたりするみたいです。

リリース日

来週と言っていたので、2024/09/03~ あたりかと
=> 2024/09/09にリリースされました!
ドキュメントはこちら

所感

全ての新機能とても便利な気がします!
特にミューテーションテストは今まで持っていたテストカバレッジの概念を変えそうです。

Pest創始者 Nuno Maduro氏による発表
https://www.youtube.com/watch?v=BNhbgcNJyAk

Discussion