テストの記述

このセクションでは、Pestを使ったテストの記述方法の概要を説明します。Pestをインストールした後、プロジェクトには以下のファイルとフォルダがあります。

1├── 📂 tests
2│ ├── 📂 Unit
3│ │ └── ExampleTest.php
4│ └── 📂 Feature
5│ │ └── ExampleTest.php
6│ └── TestCase.php
7│ └── Pest.php
8├── phpunit.xml

tests フォルダは、すべてのテストファイルが配置されるメインディレクトリです。このフォルダ内には、ユニットテストと機能テストをそれぞれ格納する2つのサブフォルダ、UnitFeature があります。TestCase.php ファイルでは、すべてのテストで使用する共通の機能や設定を定義できます。最後に、Pest.php ファイルでは、テストスイートを設定できます。

さらに、phpunit.xml ファイルがプロジェクトのルートにあり、テスト実行時にPHPUnitの様々なオプションを設定するために使用されます。PestはPHPUnit上に構築されているため、PHPUnitが提供するすべてのオプションはPestでも使用できます。したがって、phpunit.xml ファイルで行うカスタマイズや設定は、Pestテストにも適用されます。

プロジェクトのテストを書き始めるときは、テストファイルの作成と整理方法を検討することが重要です。通常、テストファイルには、ExampleTest.php のように、Test.php というサフィックスが付きます。

最初のテスト

最初のテストとして、簡単なものを書いてみましょう。プロジェクトに、2つの数値を加算する sum というグローバル関数があるとします。この関数をテストするには、Tests\Unit\SumTest.php ファイルを以下のコードで作成します。

1test('sum', function () {
2 $result = sum(1, 2);
3 
4 expect($result)->toBe(3);
5});

テストコードを書いたら、Pestを使ってテストを実行します。 ./vendor/bin/pest コマンドを実行すると、Pestはテストが成功したか失敗したかを示すメッセージを表示します。

test() 関数の代わりに、Pestはテストの説明に "it" という単語をプレフィックスとして付ける便利な it() 関数を提供しており、テストの可読性を向上させます。

1it('performs sums', function () {
2 $result = sum(1, 2);
3 
4 expect($result)->toBe(3);
5});

この場合、./vendor/bin/pest コマンドを実行すると、出力には "it performs sums" という説明とテスト結果が含まれます.

最後に、describe() 関数を使用して、関連するテストをグループ化することもできます。たとえば、describe() 関数を使用して、sum() 関数に関連するすべてのテストをグループ化できます。

1describe('sum', function () {
2 it('may sum integers', function () {
3 $result = sum(1, 2);
4 
5 expect($result)->toBe(3);
6 });
7 
8 it('may sum floats', function () {
9 $result = sum(1.5, 2.5);
10 
11 expect($result)->toBe(4.0);
12 });
13});

./vendor/bin/pest コマンドを実行すると、出力には "sum performs sums" という説明とテスト結果が含まれます。

期待値API

前の例で気づいたかもしれませんが、テストコードではPestの期待値APIを使用してアサーションを実行しました。expect() 関数は期待値APIの中核となる部分であり、特定の条件が満たされていることをアサートするために使用されます。

たとえば、前の例では、expect($result)->toBe(3) を使用して、$result の値が 3 に等しいことを確認しました。Pestの期待値APIは、toBeTrue()toBeFalse()toContain() など、コードの動作をテストするために使用できる様々なアサーション関数を備えています。

期待値APIを使用することで、コードの動作と期待される動作を明確にする、簡潔で読みやすいアサーションを書くことができます。次のセクションでは、Pestの期待値APIで最もよく使用されるアサーション関数のいくつかについて説明します。

アサーションAPI

Pestの期待値APIはアサーションを実行する便利な方法を提供しますが、利用可能な唯一のオプションではありません。PHPUnitのアサーションAPIを使用することもできます。これは、PHPUnitのアサーションAPIに既に精通している場合や、Pestの期待値APIでは利用できないより複雑なアサーションを実行する必要がある場合に役立ちます。

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

PHPUnitのアサーションAPIの完全なドキュメントは、PHPUnitのWebサイトにあります:docs.phpunit.de/en/11.3/assertions.html


期待値APIの使用方法の詳細については、次のセクションに進んでください:期待値 →