Kembali ke Semua Artikel Blog Tutorial

Cara Menulis Unit Test dan Feature Test di Laravel dengan PHPUnit

Redaksi AN Media
18 Sep 2026
Cara Menulis Unit Test dan Feature Test di Laravel dengan PHPUnit - Pembuatan Website & Aplikasi di Jember

Laravel menyediakan ekosistem testing yang terintegrasi penuh dengan PHPUnit. Artikel ini membahas cara menulis unit test dan feature test secara praktis, mulai dari persiapan hingga eksekusi, sehingga kode Anda terjamin kualitasnya.

Langkah Persiapan Lingkungan

  1. Pastikan Composer terinstal
    composer --version
    Jika belum, instal dengan curl -sS https://getcomposer.org/installer | php.
  2. Instal dependensi testing Laravel
    composer require --dev phpunit/phpunit ^10
    composer require --dev laravel/browser-kit-testing
    Laravel 10 sudah menyertakan PHPUnit secara default, namun memastikan versi terbaru tetap penting.
  3. Konfigurasi file .env.testing
    APP_ENV=testing
    DB_CONNECTION=sqlite
    DB_DATABASE=:memory:
    Simpan file ini di root proyek. Laravel akan otomatis memuatnya saat menjalankan php artisan test.
  4. Generate basis test case
    php artisan make:test ExampleTest
    Perintah ini membuat file tests/Feature/ExampleTest.php yang dapat Anda gunakan sebagai referensi.

Menulis Unit Test

Unit test berfokus pada logika kelas secara terisolasi, tanpa melibatkan HTTP atau database.

  1. Buat kelas unit test
    php artisan make:test CalculatorTest --unit
    File akan berada di tests/Unit/CalculatorTest.php.
  2. Implementasikan contoh kelas yang akan diuji
    <?php
    
    namespace App\Services;
    
    class Calculator
    {
        public function add(int $a, int $b): int
        {
            return $a + $b;
        }
    
        public function divide(int $a, int $b): float
        {
            if ($b === 0) {
                throw new \InvalidArgumentException('Division by zero');
            }
            return $a / $b;
        }
    }
    
  3. Tulis unit test untuk metode add dan divide
    <?php
    
    namespace Tests\Unit;
    
    use PHPUnit\Framework\TestCase;
    use App\Services\Calculator;
    
    class CalculatorTest extends TestCase
    {
        public function test_add_returns_correct_sum()
        {
            $calc = new Calculator();
            $this->assertEquals(7, $calc->add(3, 4));
        }
    
        public function test_divide_returns_correct_result()
        {
            $calc = new Calculator();
            $this->assertEquals(2.5, $calc->divide(5, 2));
        }
    
        public function test_divide_by_zero_throws_exception()
        {
            $this->expectException(\InvalidArgumentException::class);
            $calc = new Calculator();
            $calc->divide(5, 0);
        }
    }
    
  4. Jalankan unit test
    php artisan test --testsuite Unit
    Semua test harus berstatus OK.

Menulis Feature Test

Feature test menguji alur aplikasi secara end‑to‑end, mencakup routing, controller, request validation, dan database.

  1. Buat resource dan migration contoh
    php artisan make:model Post -m
    php artisan migrate
    Tambahkan kolom title dan body pada migration database/migrations/*_create_posts_table.php.
  2. Definisikan route, controller, dan request
    // routes/web.php
    use App\Http\Controllers\PostController;
    
    Route::post('/posts', [PostController::class, 'store']);
    
    // app/Http/Controllers/PostController.php
    namespace App\Http\Controllers;
    
    use App\Models\Post;
    use Illuminate\Http\Request;
    
    class PostController extends Controller
    {
        public function store(Request $request)
        {
            $validated = $request->validate([
                'title' => 'required|string|max:255',
                'body'  => 'required|string',
            ]);
            $post = Post::create($validated);
            return response()->json($post, 201);
        }
    }
    
    // app/Models/Post.php
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Factories\HasFactory;
    use Illuminate\Database\Eloquent\Model;
    
    class Post extends Model
    {
        use HasFactory;
        protected $fillable = ['title', 'body'];
    }
    
  3. Buat feature test untuk endpoint /posts
    php artisan make:test PostFeatureTest
    
    // tests/Feature/PostFeatureTest.php
    namespace Tests\Feature;
    
    use Illuminate\Foundation\Testing\RefreshDatabase;
    use Tests\TestCase;
    use App\Models\Post;
    
    class PostFeatureTest extends TestCase
    {
        use RefreshDatabase;
    
        public function test_store_endpoint_creates_post()
        {
            $payload = [
                'title' => 'Judul Post Pertama',
                'body'  => 'Isi konten post yang lengkap.',
            ];
    
            $response = $this->postJson('/posts', $payload);
            $response->assertStatus(201)
                     ->assertJsonFragment(['title' => 'Judul Post Pertama']);
    
            $this->assertDatabaseHas('posts', ['title' => 'Judul Post Pertama']);
        }
    
        public function test_store_validation_fails_when_title_missing()
        {
            $payload = ['body' => 'Hanya body'];
            $response = $this->postJson('/posts', $payload);
            $response->assertStatus(422)
                     ->assertJsonValidationErrors('title');
        }
    }
    
  4. Jalankan feature test
    php artisan test --testsuite Feature
    Pastikan semua skenario berhasil.
"Testing bukan sekadar menulis kode tambahan, melainkan investasi jangka panjang untuk kualitas produk. Di AN Media, setiap modul Laravel kami uji secara unit dan feature sebelum dirilis ke klien." – Tim QA AN Media

Kesimpulan & Call to Action

Dengan mengikuti langkah‑langkah di atas, Anda dapat menyiapkan lingkungan, menulis unit test untuk logika bisnis, serta feature test untuk alur aplikasi secara menyeluruh. Implementasi testing otomatis ini mempercepat deteksi bug, meningkatkan kepercayaan klien, dan memudahkan refactoring di masa depan.

Jika Anda membutuhkan bantuan lebih lanjut dalam mengintegrasikan testing ke proyek Laravel Anda, hubungi tim AN Media melalui [email protected] atau kunjungi website resmi kami untuk konsultasi gratis.

Tertarik Membuat Website atau Aplikasi Android/Mobile di Jember?

Tim pengembang profesional AN Media Jember siap membantu mewujudkan aplikasi website dan mobile impian Anda dengan arsitektur terbaik & terjangkau.

Konsultasi Gratis Sekarang

Artikel Lainnya yang Relevan

Rekomendasi bacaan menarik lainnya seputar pembuatan website & aplikasi

Lihat Semua Blog →
Cara Migrasi Website dari Shared Hosting ke VPS dengan Aman - AN Media Jember Tutorial
18 Sep 2026
Cara Migrasi Website dari Shared Hosting ke VPS dengan Aman

Panduan lengkap langkah demi langkah migrasi website dari shared hosting ke VPS tanpa down...

Baca Selengkapnya →
Cara Setup WordPress Multisite untuk Banyak Website dalam Satu Instalasi - AN Media Jember Tutorial
17 Sep 2026
Cara Setup WordPress Multisite untuk Banyak Website dalam Satu Instalasi

Panduan lengkap AN Media langkah demi langkah setup WordPress Multisite untuk mengelola ba...

Baca Selengkapnya →
Panduan Mengatasi Plugin & Theme Conflict Error pada Website WordPress - AN Media Jember Tutorial
13 Sep 2026
Panduan Mengatasi Plugin & Theme Conflict Error pada Website WordPress

Panduan lengkap mengatasi error konflik plugin & theme WordPress dengan langkah praktis da...

Baca Selengkapnya →