Skip to content

emka.web.id

menulis pengetahuan – merekam peradaban

Menu
  • Home
  • Tutorial
  • Search
Menu

Cara Menggunakan Closure Atasi Error Model Factories di PHPUnit Laravel

Posted on June 10, 2024

Di Laravel, ada beberapa cara untuk bekerja dengan pabrik model (model factories) dalam pengujian fitur. Misalnya, Anda bisa membuat model di fungsi setUp() jika ingin menggunakannya untuk beberapa pengujian atau langsung membuatnya di tiap kasus pengujian.

Namun, bagaimana jika Anda ingin menguji kasus dengan berbagai macam data? Di sinilah data provider PHPUnit dengan model Eloquent berperan.

Menggunakan data provider pada pengujian fitur bisa jadi merepotkan karena ia dijalankan sebelum Laravel di-bootstrapping melalui class TestCase yang dijalankan selama setUp(). Data provider dieksekusi di awal proses menjalankan phpunit, sehingga Anda akan menemui error berikut jika ingin menggunakannya:

namespace Tests\Feature;

use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use PHPUnit\Framework\Attributes\DataProvider;
use Tests\TestCase;

class ExampleTest extends TestCase
{
    use RefreshDatabase;

    #[DataProvider('nonAdminUsers')]
    public function test_non_admin_users_cannot_access_admin($user): void
    {
        $response = $this
            ->actingAs($user())
            ->get('/admin')
            ->assertStatus(403);
    }

    public static function nonAdminUsers(): array
    {
        return [
            [User::factory()->player()->create()],
            [User::factory()->coach()->create()],
            [User::factory()->owner()->create()],
        ];
    }
}

Jika Anda menjalankan pengujian di atas, Anda akan mendapatkan error seperti berikut, tergantung versi Laravel Anda (contoh ini untuk Laravel 11):

$ vendor/bin/phpunit tests/Feature/ExampleTest.php

There was 1 PHPUnit error:

1) Tests\Feature\ExampleTest::test_non_admin_users_cannot_access_admin
The data provider specified for Tests\Feature\ExampleTest::test_non_admin_users_cannot_access_admin is invalid
A facade root has not been set.

tests/Feature/ExampleTest.php:18

Ini terjadi karena ketika kode data provider dijalankan, aplikasi Laravel belum di-bootstrapping!

Solusi Menggunakan Closure

Jika Anda pengguna Pest PHP, contoh “Bound Datasets” menggunakan closure untuk data model:

it('can generate the full name of a user', function (User $user) {
    expect($user->full_name)->toBe("{$user->first_name} {$user->last_name}");
})->with([
    fn() => User::factory()->create(['first_name' => 'Nuno', 'last_name' => 'Maduro']),
    fn() => User::factory()->create(['first_name' => 'Luke', 'last_name' => 'Downing']),
    fn() => User::factory()->create(['first_name' => 'Freek', 'last_name' => 'Van Der Herten']),
]);

Di PHPUnit, kita bisa menggunakan closure untuk mengirimkan kode ke pengujian melalui data provider tanpa langsung mencoba membuat datanya:

namespace Tests\Feature;

use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use PHPUnit\Framework\Attributes\DataProvider;
use Tests\TestCase;

class ExampleTest extends TestCase
{
    use RefreshDatabase;

    #[DataProvider('nonAdminUsers')]
    public function test_non_admin_users_cannot_access_admin($user): void
    {
        $response = $this
            ->actingAs($user())
            ->get('/admin')
            ->assertStatus(403);
    }

    public static function nonAdminUsers(): array
    {
        return [
            [fn(): User => User::factory()->player()->create()],
            [fn(): User => User::factory()->coach()->create()],
            [fn(): User => User::factory()->owner()->create()],
        ];
    }
}

Perhatikan pemanggilan $user(), yang kita teruskan ke actingAs(). Jika Anda perlu menggunakan model di berbagai tempat, tetapkan saja ke sebuah variabel. Sekarang, data pabrik dibuat di dalam pengujian, sesuai dengan yang kita inginkan!

Pelajari Lebih Lanjut

Untuk mempelajari lebih lanjut tentang pengujian fitur HTTP di Laravel, cek dokumentasi resminya.

Kesimpulan

Artikel ini menjelaskan bagaimana mengatasi error yang muncul ketika menggunakan data provider PHPUnit dengan pabrik model Eloquent dalam pengujian fitur Laravel. Solusi yang disarankan adalah menggunakan closure untuk menunda pembuatan data pabrik hingga ke dalam pengujian itu sendiri. Ini memastikan bahwa aplikasi

Terbaru

  • Inilah Cara Buka Situs yang Diblokir di Tahun 2026, Trik Rahasia Tanpa VPN!
  • Inilah Cara Menghilangkan Iklan di HP Xiaomi dan POCO Paling Ampuh Tanpa Root, Update April 2026
  • Inilah 7 Rekomendasi HP 1 Jutaan Terbaik yang Layak Kalian Lirik, Speknya Nggak Kaleng-Kaleng!
  • Inilah 7 Cara Mengembalikan Foto yang Terhapus Permanen di HP, Ternyata Masih Bisa Diselamatkan!
  • Inilah Cara Mengatasi Baterai Boros Setelah Update HyperOS yang Paling Ampuh
  • Inilah Pokémon Champions 2026, Game Battle Kompetitif Terbaru dan Cara Download-nya yang Perlu Kalian Tahu!
  • Inilah Doods Viral: Pengertian, Bahaya, dan Kenapa Kalian Harus Ekstra Waspada!
  • Gini Caranya Ngebangun Bisnis AI yang Menguntungkan dalam 48 Jam Saja!
  • Pengertian “He is Risen” Adalah?
  • Inilah Rekomendasi HP Snapdragon Paling Murah dengan RAM 8 GB Terupdate April 2026
  • Inilah 12 Kampus Negeri di Jogja yang Jarang Diketahui, Ternyata Banyak yang Kasih Kuliah Gratis!
  • Inilah Rekomendasi HP Tecno Kamera Terbaik 2026, Spek Gahar Harga Tetap Pelajar!
  • Apa itu PPU UTBK? Ini Rahasia Taklukkan Skor Tinggi di SNBT 2026 Tanpa Harus Menghafal!
  • Inilah Alasan Kenapa Lapisan Es Greenland Ternyata Bisa Bergerak Kayak Adonan yang Dipanaskan
  • Inilah Kode Redeem FC Mobile 10 April 2026 dan Rahasia Panen Pemain OVR 117
  • Apa itu Benwit/Bensin Sawit? Benarkah Bisa Jadi Solusi Bahan Bakar Masa Depan atau Cuma Hoaks Belaka?
  • Inilah 4 Tablet 5G Termurah April 2026 yang Kencang dan Worth It untuk Kerja!
  • Inilah Rincian UKT Unesa 2026 Jalur SNBP dan SNBT, Cek Biaya Kuliahmu di Sini!
  • Inilah Bocoran Event Free Fire 10 April 2026, Ada Diskon 90 Persen dan Kode Redeem Gratis!
  • Inilah Deretan HP Murah April 2026, dari Infinix NFC Hingga Realme dengan Baterai Super Besar dan Update Penting IGRS
  • Inilah Alasan Google Kena Sanksi Teguran Terkait PP Tunas dan Perlindungan Anak di YouTube
  • Inilah Spesies Baru Homalomena dari Sumatera yang Berhasil Diidentifikasi Melalui Media Sosial
  • Inilah Cara Download FF Advance Server 2026 Apk yang Aman dan Update Misteri Bawah Laut Terbaru!
  • Inilah 10 PTS Terbaik di Indonesia Versi Uniranks 2026, Referensi Mantap Buat Kalian Calon Mahasiswa Baru!
  • Inilah Daftar Lengkap Pusat UTBK 2026 di Jawa Tengah, Cek Lokasi dan Alamat Kampusnya Biar Nggak Salah Alamat!
  • Inilah Alasan Kenapa Hasil TKA Jadi Kunci Penting di Jalur Prestasi SPMB 2026, Orang Tua Wajib Tahu!
  • Inilah Alasan Kenapa Situs Bumiayu Dianggap Lebih Tua dari Sangiran dan Jadi Kunci Sejarah Jawa
  • Inilah Cara Cerdik Larva Kumbang Hitam Eropa Meniru Aroma Bunga untuk Menipu Lebah
  • Inilah 45 Planet Berbatu yang Paling Berpotensi Jadi Rumah Kedua Manusia di Masa Depan
  • Inilah Cara Ambil Kursus Online Gratis dari Harvard University untuk Asah Skill Digital Kalian!
  • Is it Time to Replace Nano? Discover Fresh, the Terminal Text Editor You Actually Want to Use
  • How to Design a Services Like Google Ads
  • How to Fix 0x800ccc0b Outlook Error: Step-by-Step Guide for Beginners
  • How to Fix NVIDIA App Error on Windows 11: Simple Guide
  • How to Fix Excel Formula Errors: Quick Fixes for #NAME
  • How to Use VoxCPM2: The Complete Tutorial for Professional Voice Cloning and AI Speech Generation
  • Complete tutorial for Creao AI: How to build smart AI agents that automate your daily tasks
  • How to Streamline Your Digital Workflow with TeraBox AI: A Complete Tutorial for Beginners
  • How to Run Google Gemma 4 Locally: A Beginner’s Guide to Tiny but Mighty AI Models
  • A Beginner Tutorial on Cloning Website Source Code Using ChatGPT and AI Logic Reconstruction
  • Apa itu Spear-Phishing via npm? Ini Pengertian dan Cara Kerjanya yang Makin Licin
  • Apa Itu Predator Spyware? Ini Pengertian dan Kontroversi Penghapusan Sanksinya
  • Mengenal Apa itu TONESHELL: Backdoor Berbahaya dari Kelompok Mustang Panda
  • Siapa itu Kelompok Hacker Silver Fox?
  • Apa itu CVE-2025-52691 SmarterMail? Celah Keamanan Paling Berbahaya Tahun 2025

©2026 emka.web.id | Design: Newspaperly WordPress Theme