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 minimalis — tidak perlu class dan method, cukup fungsi
- Chainable expectations —
expect($value)->toBe()->toHaveLength() - Kompatibel PHPUnit — semua assertion PHPUnit tetap bisa dipakai
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
- Gunakan
it()untuk test yang berbunyi alami dalam bahasa Inggris - Gunakan
test()untuk deskripsi yang lebih deskriptif - Manfaatkan
expect()chaining untuk assertion yang ringkas