Panduan penulisan pengujian (testing) menggunakan framework Pest PHP v4. Gunakan skill ini saat diminta menulis Unit Test, Feature Test, TDD (Test-Driven Development), atau saat mengecek respons Inertia React dan endpoint Wayfinder.
Aplikasi ini TIDAK MENGGUNAKAN PHPUNIT secara langsung untuk penulisan test. Semua test WAJIB ditulis menggunakan sintaks fungsional dari Pest PHP (pestphp/pest v4).
wayfinder-development dan inertia-react-development.laravel-modules-artisan untuk penempatan folder.DILARANG KERAS menulis test menggunakan gaya Object-Oriented PHPUnit seperti ini:
// SALAH! JANGAN GUNAKAN INI
class InvoiceTest extends TestCase {
public function test_it_can_create_invoice() { ... }
}
Selalu gunakan gaya fungsional Pest (it, test, describe, beforeEach):
use Modules\Finance\Models\Invoice; use Modules\User\Models\User;
// Gunakan 'describe' untuk mengelompokkan test (Opsional tapi direkomendasikan) describe('Invoice Generation', function () {
// Setup sebelum setiap test di blok ini
beforeEach(function () {
$this->user = User::factory()->create();
$this->actingAs($this->user);
});
// Gunakan 'it' atau 'test'
it('can generate a monthly invoice', function () {
// Arrange
$invoiceData = ['amount' => 500000];
// Act
$response = $this->post('/finance/invoices', $invoiceData);
// Assert (menggunakan Expectation API Pest)
$response->assertStatus(201);
expect(Invoice::count())->toBe(1);
});
}); </code-snippet>
Alih-alih menggunakan $this->assertEquals(), gunakan expect() API milik Pest:
expect($student->name)->toBe('Fauzan');
expect($invoices)->toHaveCount(5);
expect($status)->toBeTrue();
expect($user)->toBeInstanceOf(User::class);
Saat menguji endpoint yang mengembalikan halaman React (Inertia), pastikan Anda menggunakan assertion Inertia:
use Inertia\Testing\AssertableInertia as Assert;
it('renders the dashboard page via Inertia', function () { $this->get('/app/dashboard') ->assertOk() ->assertInertia(fn (Assert $page) => $page ->component('Dashboard/Index') // Pastikan nama komponen React sesuai ->has('stats.activeUsers') ); }); </code-snippet>
Jangan gunakan make:test bawaan Laravel. Gunakan perintah modular:
# Membuat Feature Test di Modul Finance
php artisan module:make-test InvoiceFeatureTest Finance
# Membuat Unit Test di Modul Payroll
php artisan module:make-test PayrollCalculationTest Payroll unit
# Menjalankan seluruh test
php artisan test
# ATAU menggunakan binary pest
./vendor/bin/pest
# Menjalankan test spesifik di dalam satu modul
./vendor/bin/pest Modules/Finance/Tests/
TestCase PHPUnit klasik alih-alih fungsi it()/test().uses(RefreshDatabase::class) pada file Pest.php).tests/Feature/ bawaan Laravel alih-alih Modules/NamaModul/Tests/Feature/).