Laravel HTTP Testing Lanjut Assertions Fake Pest Expectations
Definisi
Selain RefreshDatabase dasar, testing lanjut Laravel memakai assertion HTTP kaya (assertSee, assertStatus), fake (Mail, Queue, Event) untuk isolasi, dan Pest expectations untuk test yang ringkas.
Kapan dipakai
Pakai saat menguji endpoint nyata tanpa mengirim email/queue sungguhan, dan ingin test cepat & deterministik. Sangat penting sebelum deploy.
Cara kerja
HTTP test dengan assertion
test('user bisa lihat dashboard', function () {
$user = User::factory()->create();
$this->actingAs($user)
->get('/dashboard')
->assertStatus(200)
->assertSee('Selamat datang');
});Fake layanan
use Illuminate\Support\Facades\Mail;
use App\Mail\WelcomeMail;
test('kirim welcome saat register', function () {
Mail::fake();
// ... register
Mail::assertSent(WelcomeMail::class);
});Pest expectation
expect($response->status())->toBe(200);
expect($user->name)->toBe('Budi');Struktur alur
Loading diagram...
Catatan implementasi
Mail::fake(),Queue::fake(),Event::fake()mencegah side-effect nyata.RefreshDatabasedi tiap test menjaga isolasi; butuh DB testing terpisah.- Pest lebih ringkas dari PHPUnit boilerplate; keduanya jalan di Laravel.
- Assert JSON via
assertJsonStructure/assertJsonPath.
Kesalahan umum
- Lupa fake: test kirim email beneran ke user.
- DB testing produksi: pastikan
DB_CONNECTION=testingterpisah. - AssertSee pada data dinamis: teks berubah tiap run, test flaky.
- Mutasi shared state antar test: factory + refresh wajib.