Testing Otomatis di Laravel untuk Pemula

Banyak developer pemula menganggap testing otomatis sebagai pekerjaan tambahan yang membuang waktu. Kenyataannya justru sebaliknya: satu test yang ditulis sekali akan menjaga fitur...

Testing Otomatis di Laravel untuk Pemula

Banyak developer pemula menganggap testing otomatis sebagai pekerjaan tambahan yang membuang waktu. Kenyataannya justru sebaliknya: satu test yang ditulis sekali akan menjaga fitur Anda tetap benar selamanya. Setiap kali Anda mengubah kode, test membuktikan bahwa fitur lama tidak rusak — tanpa Anda harus membuka browser dan mengklik ulang semuanya secara manual. Laravel sudah menyertakan seluruh perkakas testing sejak instalasi awal, jadi Anda tidak perlu memasang apa pun. Tutorial ini mengajak Anda menulis test pertama dari nol.

1. Kenapa Harus Menulis Test?

Bayangkan aplikasi kasir Anda punya fitur hitung total belanja. Tanpa test, setiap kali menambah diskon atau pajak Anda harus mengecek manual apakah perhitungannya masih benar. Dengan test, Anda cukup menjalankan satu perintah dan langsung tahu jika ada yang salah. Manfaat utamanya:

  • Cegah regresi: fitur yang tadinya jalan tidak diam-diam rusak saat Anda menambah kode baru.
  • Dokumentasi hidup: test menjelaskan bagaimana fitur seharusnya berperilaku.
  • Percaya diri saat refactor: Anda berani merapikan kode karena test menjaganya.

2. Feature Test vs Unit Test

Laravel membagi test ke dalam dua folder di direktori tests/:

  • Unit test (tests/Unit) menguji satu potongan kecil kode secara terisolasi, misalnya satu method di sebuah class, tanpa menyentuh database atau HTTP.
  • Feature test (tests/Feature) menguji perilaku aplikasi secara utuh: mengirim request ke sebuah URL, memeriksa respons, dan bahkan memeriksa isi database. Untuk pemula, feature test biasanya paling berguna karena menguji apa yang benar-benar dilihat pengguna.

3. Membuat Test dengan make:test

Buat file test baru menggunakan Artisan. Secara default terbuat feature test:

php artisan make:test ProductTest

Untuk membuat unit test, tambahkan flag --unit:

php artisan make:test PriceCalculatorTest --unit

Laravel 11 secara default memakai Pest, framework testing dengan sintaks yang ringkas. Namun PHPUnit klasik tetap didukung penuh. Kita akan melihat keduanya.

4. Menulis Test Pertama (Pest)

Pest menggunakan gaya fungsional yang mudah dibaca. Buka file yang baru dibuat dan tulis:

<?php

test('halaman produk bisa diakses', function () {
    $response = $this->get('/products');

    $response->assertStatus(200);
});

Kalimat di dalam test('...') menjelaskan apa yang diuji. Fungsi $this->get('/products') mensimulasikan pengunjung membuka URL, lalu assertStatus(200) memastikan halaman merespons sukses.

5. Versi PHPUnit

Jika Anda lebih suka gaya class-based tradisional, PHPUnit menuliskannya sebagai method di dalam class yang mewarisi TestCase. Setiap method uji diawali kata test:

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ProductTest extends TestCase
{
    public function test_halaman_produk_bisa_diakses(): void
    {
        $response = $this->get('/products');

        $response->assertStatus(200);
    }
}

6. Assertion yang Sering Dipakai

Assertion adalah pernyataan yang harus bernilai benar agar test lolos. Beberapa yang paling umum untuk menguji respons HTTP:

$response->assertStatus(200);          // kode status HTTP
$response->assertOk();                 // sama dengan status 200
$response->assertRedirect('/login');  // dialihkan ke URL tertentu
$response->assertSee('Daftar Produk'); // teks muncul di halaman
$response->assertSessionHasErrors('name'); // ada error validasi

7. Menguji Database dengan RefreshDatabase

Saat test menyentuh database, Anda tidak ingin data uji mengotori database asli. Trait RefreshDatabase menjalankan migrasi di awal dan mengembalikan database ke keadaan bersih setiap test. Pakai database khusus testing (biasanya SQLite in-memory di phpunit.xml).

<?php

use Illuminate\Foundation\Testing\RefreshDatabase;

uses(RefreshDatabase::class);

test('produk baru tersimpan ke database', function () {
    $response = $this->post('/products', [
        'name'  => 'Kopi Susu',
        'price' => 15000,
        'stock' => 10,
    ]);

    $response->assertRedirect('/products');

    $this->assertDatabaseHas('products', [
        'name'  => 'Kopi Susu',
        'price' => 15000,
    ]);
});

Assertion assertDatabaseHas() memeriksa bahwa baris dengan data tersebut benar-benar ada di tabel — bukti bahwa fitur simpan bekerja.

8. Membuat Data Uji dengan Factory

Menulis data dummy manual di setiap test itu melelahkan. Factory menghasilkan data palsu yang realistis dengan satu baris. Buat factory-nya:

php artisan make:factory ProductFactory

Definisikan bentuk datanya:

public function definition(): array
{
    return [
        'name'  => fake()->words(2, true),
        'price' => fake()->numberBetween(10000, 100000),
        'stock' => fake()->numberBetween(0, 50),
    ];
}

Sekarang di dalam test Anda bisa membuat 3 produk sekaligus dan memastikan semuanya muncul:

test('daftar menampilkan semua produk', function () {
    Product::factory()->count(3)->create();

    $response = $this->get('/products');

    $response->assertStatus(200);
    $this->assertDatabaseCount('products', 3);
});

9. Menjalankan Semua Test

Jalankan seluruh test suite dengan satu perintah:

php artisan test

Anda akan melihat titik hijau untuk setiap test yang lolos dan penjelasan detail bila ada yang gagal. Untuk menjalankan satu file saja:

php artisan test --filter=ProductTest

Tips agar Testing Jadi Kebiasaan

  • Mulai dari feature test untuk fitur terpenting (login, checkout, simpan data).
  • Tulis test sebelum atau tepat setelah membuat fitur, jangan ditunda.
  • Jalankan php artisan test sebelum setiap commit agar tidak ada yang rusak masuk ke repositori.

Dengan menguasai make:test, assertion, RefreshDatabase, dan factory, Anda sudah memiliki fondasi testing yang cukup untuk menjaga aplikasi Laravel apa pun tetap sehat seiring bertambahnya fitur.

Yudhi
Ditulis oleh
Yudhi
Founder & Lead Developer, GudangCode

Yudhi adalah founder GudangCode dan developer Laravel dengan pengalaman membangun puluhan sistem informasi bisnis siap pakai — mulai dari POS, HRIS, hingga aplikasi manajemen. Ia menulis panduan dan artikel di GudangCode untuk membantu developer Indonesia menjalankan, memahami, dan men-deploy source code Laravel dengan benar.

Laravel PHP MySQL Sistem Informasi Bisnis
Lihat semua artikel Yudhi
Mau source code & aplikasi lengkapnya?

Daftar gratis untuk mengunduh aplikasi bisnis, sistem informasi, dan source code Laravel siap pakai.

Daftar Gratis & Download
Testing Laravel Programming & Laravel
📚 Free Learning Hub

Learn Coding for Free at DhieCoderWeb

Explore Laravel, PHP, JavaScript tutorials, source code, web development guides, and practical programming tips.

DhieCoderWeb
100+
Tutorials
Free
Learning
SEO
Tips
Visit Dhiecoderweb.com →

Dapatkan Akses Penuh Sekarang!

Bergabunglah menjadi member kami dan dapatkan akses eksklusif ke seluruh fitur unggulan aplikasi ini. Proses cepat, mudah, dan langsung bisa Anda gunakan.

Daftar Members Sekarang
Tim Support
Online
Isi data dulu untuk mulai chat:
Beri rating & testimoni sebelum menutup:
Live chat by gudangcode.com