ホームページ > バックエンド開発 > PHPチュートリアル > 最終的に PHP と Laravel 用の Pest を試してから切り替えました

最終的に PHP と Laravel 用の Pest を試してから切り替えました

Barbara Streisand
リリース: 2024-11-30 02:56:14
オリジナル
425 人が閲覧しました

私は 2015 年の半ばに純粋な PHP を学び始めました。その後、CodeIgniter 3 と Laravel 5.1 に慣れてきました。何年もの間、Laravel は私が選んだフレームワークであり、今でもそれを使い続けています。他の人気のある PHP プロジェクトと同様に、単体テストには PHPUnit が唯一の選択肢であることがわかります。しかし、ペストがやって来た2021年に少し変化がありました。これは、Nuno Maduro によって作成されました。Nuno Maduro は Laravel のエンジニアであり、PHP や Laravel コミュニティで広く使用されている優れたプロジェクト/パッケージも数多く作成しています。

Pest の初日以来、私は PHPUnit で十分であり、この新しいテスト ツールを学ぶのが面倒なので、Pest のことを気にしていませんでした。しかし、Laravel コミュニティが成長すればするほど、Pest が推奨されるようになります。 Spatie、Livewire、Filament などの多くの Laravel プロジェクト/パッケージは Pest を使用しています。したがって、問題は、それらに関連するものをテストするときに、PHPUnit に移植する必要があることです。仕方がないようです。今度は Pest を見てみましょう。

初めて見る

インストールセクションに続いて、Pest を使用して最初の PHP プロジェクトを作成します。

mkdir ~/Herd/lerning-pest

cd ~/Herd/learning-pest

composer require pestphp/pest --dev --with-all-dependencies

./vendor/bin/pest --init 
ログイン後にコピー

ディレクトリ構造はPHPUnitとほぼ同じです。違うのはテストの見た目です。クラスベースではなくクロージャベースです。

<?php

// tests/Unit/ExampleTest.php

test('example', function () {
    expect(true)->toBeTrue();
});
ログイン後にコピー

実行時にオブジェクトにメソッドを遅延的にアタッチできる Closure の使用を知っています。したがって、これは PHPUnit でこのように書き直される可能性があります。

<?php

// tests/Unit/ExampleTest.php

class ExampleTest extends \PHPUnit\Framework\TestCase
{
    public function test_example()
    {
        $this->assertTrue(true);
    }
}
ログイン後にコピー

Pest アサーション構文は Ruby の Rspec と Jest からインスピレーションを得ていると書かれていますが、私は知りません。なので、私もあまり興味がありません。私にとって、アサーション構文がどのようなものであるかは重要ではありません。

テストの実行時に表示される結果が気に入っています。 PHPUnit よりもはるかに美しく、クリーンだと思います。

I finally tried Pest for PHP & Laravel, then made the switch

アサーション

これらは、私が PHPUnit で最もよく使用したアサーションです。

$this->assertSame($expected, $actual);
$this->assertTrue($condition);
$this->assertFalse($condition);
$this->assertNull($actual);
$this->assertEmpty($array);
$this->assertCount($count, $countable);
$this->assertInstanceof($type, $instance);
ログイン後にコピー

これらは Pest で簡単に書き直すことができます。

expect($actual)->toBe($expected);
expect($condition)->toBeTrue();
expect($condition)->toBeFalse();
expect($actual)->toBeNull();
expect($actual)->toBeEmpty();
expect($actual)->toBeInstanceOf($type);
ログイン後にコピー

前に述べたように、Pest アサーション構文は問題ありませんが、新しい API を勉強する必要がないため、現在は PHPUnit を使い続けています。とにかく、私は PHPUnit アサーションを好み、Pest でユニークなものだけを使用します。アーキテクチャのテストはその一例です。私のテストファイルは次のようになります。

<?php

test("all PHP files in LearningPest namespace must have strict mode enabled", function () {
    arch()
        ->expect('LearningPest')
        ->toUseStrictTypes();
});

test('all PHPUnit assertions are available for Pest', function () {
    $instance = new \stdClass();

    $getInstance = function () use ($instance) {
        return $instance;
    };

    $this->assertSame($instance, $getInstance());

    $this->assertInstanceOf(stdClass::class, $instance);

    $this->assertTrue(1 < 2);
    $this->assertFalse(1 > 2);

    $value = null;

    $this->assertNull($value);

    $this->assertEmpty([]);

    $array = [1, 2, 3];

    $this->assertCount(3, $array);
});
ログイン後にコピー

必須機能

PHPUnit と同様に Pest で作業できるようにする必須の機能が多数あります。ここにそれらがあります:

  • PHPUnit にはデータプロバイダーがあります。 Pest にはデータセットがあります。
  • PHPUnit には、setUp、tearDown、setUpBeforeClass、tearDownAfterClass があります。 Pest には、beforeEach、afterEach、beforeAll、afterAll があります。
  • どちらにも例外チェックがあり、テストをスキップ/グループ化/フィルタリングできます。

Mockery はスタンドアロン ライブラリであるため、ここにはリストしません。

一方、Pest には、アーキテクチャ、スナップショット、ストレス テスト、プラグインなど、便利なものがたくさんあります。テストを書くときにそれらを発見します。

結論

  • Pest は PHPUnit 上に構築されており、最近 PHP および Laravel コミュニティで広く使用され推奨されています。
  • Pest を使用すると、以前とほぼ同じ方法で作業できますが、より優れた CLI とより便利な機能を使用できます。
  • 現在、Pest は私の PHP および Laravel アプリケーションのデフォルトのテスト フレームワークです。

Pest を使用したことがない PHP 開発者の方は、ぜひ試してみてください。

以上が最終的に PHP と Laravel 用の Pest を試してから切り替えましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート