Testing dengan Pest — Testing

Apa itu Pest? Pest adalah framework testing PHP yang dibangun di atas PHPUnit dengan sintaks yang lebih bersih dan ekspresif. Pest tidak menggantikan PHPUnit —

Apa itu Pest?

Pest adalah framework testing PHP yang dibangun di atas PHPUnit dengan sintaks yang lebih bersih dan ekspresif. Pest tidak menggantikan PHPUnit — melainkan membungkusnya dengan API yang lebih nyaman.

Kenapa Pest?

Sintaks Dasar

<?php

// it() — deskripsi test dimulai dari "it"
it("can add two numbers", function () {
    $result = 2 + 3;
    expect($result)->toBe(5);
});

// test() — deskripsi test lebih bebas
test("penjumlahan menghasilkan angka positif", function () {
    expect(2 + 3)->toBeGreaterThan(0);
});

Expect API (Chainable)

Kekuatan utama Pest ada di expect() yang bisa di-chain:

expect($user)
    ->name->toBe("Budi")
    ->email->toEndWith("@gmail.com")
    ->isActive->toBeTrue();

expect($items)
    ->toBeArray()
    ->toHaveCount(3)
    ->each->toBeString();

expect($text)
    ->toBeString()
    ->not->toBeEmpty()
    ->toContain("halo");

Datasets (Data Providers)

// Inline dataset
it("mengalikan dengan benar", function (int $a, int $b, int $expected) {
    expect($a * $b)->toBe($expected);
})->with([
    [2, 3, 6],
    [0, 5, 0],
    [-1, 4, -4],
]);

// Named dataset
dataset("operasi-math", [
    "positif" => [2, 3, 5],
    "negatif" => [-1, -2, -3],
    "nol"     => [0, 0, 0],
]);

test("penjumlahan", function (int $a, int $b, int $expected) {
    expect($a + $b)->toBe($expected);
})->with("operasi-math");

Grouping dengan describe()

describe("Kalkulator", function () {
    it("menambahkan dua angka", function () {
        expect(2 + 3)->toBe(5);
    });

    it("mengurangi dua angka", function () {
        expect(5 - 3)->toBe(2);
    });
});

describe("String helper", function () {
    it("mengubah ke uppercase", function () {
        expect(strtoupper("halo"))->toBe("HALO");
    });
});

Migrasi dari PHPUnit ke Pest

Pest bisa dipakai bersama PHPUnit dalam satu project. Migrasi bisa dilakukan bertahap:

// PHPUnit (sebelum)
class UserTest extends TestCase
{
    public function test_user_has_name(): void
    {
        $user = User::factory()->create();
        $this->assertNotNull($user->name);
    }
}

// Pest (sesudah)
it("has a name", function () {
    $user = User::factory()->create();
    expect($user->name)->not->toBeNull();
});

Tips

Yang akan kamu pelajari