首頁 > 後端開發 > php教程 > 我最終嘗試了 Pest for PHP & Laravel,然後進行了切換

我最終嘗試了 Pest for PHP & Laravel,然後進行了切換

Barbara Streisand
發布: 2024-11-30 02:56:14
原創
426 人瀏覽過

我在2015年中開始學習純PHP。然後,我熟悉了CodeIgniter 3和Laravel 5.1。多年來,Laravel 是我選擇的框架,而且我仍然堅持使用它。與其他流行的 PHP 專案一樣,我認為 PHPUnit 是單元測試的唯一選擇。但2021年佩斯來了,情況發生了一些變化。它是由 Laravel 工程師 Nuno Maduro 創建的,他還製作了許多在 PHP 和 Laravel 社區中廣泛使用的優秀專案/套件。

從 Pest 的第一天起,我就不再關心它了,因為 PHPUnit 對我來說已經足夠了,我懶得學習這個新的測試工具。但 Laravel 社群發展越多,推薦的 Pest 就越多。 Spatie、Livewire、Filament 等的許多 Laravel 專案/包都使用 Pest。所以問題是當測試與它們相關的東西時,我必須移植到 PHPUnit。我似乎別無選擇。是時候去看看佩斯了。

第一眼看上去

在安裝部分之後,我使用 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 斷言語法很好,但我目前堅持使用 PHPUnit,因為我不需要研究新的 API。不管怎樣,我更喜歡 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 開發者,不妨試試看。

以上是我最終嘗試了 Pest for PHP & Laravel,然後進行了切換的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板