Run a Code Once Before All Tests Started (Laravel, PHPUnit Optimization) #indonesian

Optimasi Laravel dan PHPUnit test

Syofyan Zuhad
2 min readNov 8, 2021

Assalamu’alaikum Warahmatullahi Wabarakatuh

Kali ini kita akan belajar bagaimana melakukan optimasi untuk file testing. Masalah yang biasa dialami adalah menunggu selesainya testing dengan waktu yang sangat lama. Tentu ini hal yang membuang-buang waktu kita. Perhatikan hasil test berikut:

waktu sebalum optimasi
total waktu sebelum dioptimasi

Diatas adalah hasil dari testing yang belum di-optimasi. Itu terjadi karena di saat melakukan testing, kita membutuhkan relasi dari table lain untuk mendapatkan data. Jadi yang saya lakukan adalah menjalankan seeder setiap kali akan membuat fake data. Padahal itu menjadikan testing ini memakan banyak waktu.

Jadi gimana solusinya? Untuk masalah ini, kita sebenarnya bisa melakukan seeding di awal, setiap sebalum test dijalankan (bukan disetiap test/method).

Untuk melakukannya, kita perlu menambahkan file yang berisi sebuah trait MigrateFreshSeedOnce pada folder test seperti gambar berikut:

MigrateFreshSeedOnce.php

Lalu diisi kode seperti di bawah ini:

Kemudian kita perlu menggunakan trait diatas dengan menambahkannya pada file TestCase.php seperti ini:

abstract class TestCase extends BaseTestCase{
use CreatesApplication, DatabaseTransactions, MigrateFreshSeedOnce;
}

Sebagai tambahan, kita bisa menambahkan trait DatabaseTransaction agar database kita kembali kosong setelah menjalankan semua trait.

Hasilnya bisa kita lihat di bawah ini:

setelah optimasi

Sekian untuk kali ini. Semoga Bermanfaat.

Wassalamu’alaikum warahmatullahi Wabarakatuh…

--

--