Pest — Unit Testing Framework Untuk PHP, Nyoba Nerapin Di Framework Laravel
Apa Itu Unit Testing ?
Simplenya unit testing itu adalah metode pengujian secara otomatis fitur atau fungsi pada sebuah aplikasi, disini saya tidak akan menjelaskan lebih lanjut mengenai unit testing, saya akan lebih membahas mengenai salah satu frameworknya yaitu Pest PHP.
Apa itu Pest?
Syarat: PHP versi 7.3+, Composer
php -v
composer -v
Pest adalah salah satu framework unit testing PHP yang menjanjikan syntax yang lebih sederhana dan mudah untuk dibaca maupun dipelajari oleh orang — orang, serta menampilkan output yang lebih enak dan bagus untuk dilihat.
Setup laravel
Nah untuk studi kasus menggunakanlaravel disini saya buat yang simple saja, hanya membuat model, migration, factory Post dengan isi: name + description, serta membuat api untuk menampilkan data post, disini saya membuatnya menggunakan laravel versi 9 dengan PHP versi 8 . Setelah temen — temen setup / install aplikasi laravel silahkan setup database seperti biasa lalu ikuti langkah — langkah dibawah ini:
- Membuat model, migration Post
php artisan make:model Post -f -m
isi dari model Post :
<?phpnamespace App\Models;use Illuminate\Database\Eloquent\Factories\HasFactory;use Illuminate\Database\Eloquent\Model;class Post extends Model{use HasFactory;/*** The attributes that are mass assignable.** @var array<int, string>*/protected $fillable = ['title','description'];}
Isi dari migration Post:
<?phpuse Illuminate\Database\Migrations\Migration;use Illuminate\Database\Schema\Blueprint;use Illuminate\Support\Facades\Schema;return new class extends Migration{/*** Run the migrations.** @return void*/public function up(){Schema::create('posts', function (Blueprint $table) {$table->id();$table->string('title');$table->longText('description');$table->timestamps();});}/*** Reverse the migrations.** @return void*/public function down(){Schema::dropIfExists('posts');}};
Setelah semua file di atas diisi, lalu jalankan perintah dibawah untuk migrate database:
php artisan migrate
2. Membuat url api/post
Nah untuk tujuan pengujian nanti disini kita coba membuat endpoint pada api/post yang mereturn data post, tambahkan kodingan dibawah pada file routes/api.php
Route::get('posts', function () {return \App\Models\Post::all();});
Instalasi Pest Pada Framework Laravel
Setelah setup aplikasi laravel di atas, selanjutnya kita akan menginstall Pest PHP, untuk langkah — langkahnya instalasinya sebagai berikut:
- Install Pest menggunakan composer
composer require pestphp/pest --dev --with-all-dependencies
2. Karena menggunakan laravel, wajib menginstall juga pest-plugin-laravel dan menjalankan perintah php artisan pest:install
composer require pestphp/pest-plugin-laravel --devphp artisan pest:install
Coba membuat file test pertama menggunakan pest
Pada pest ada dua cara untuk menulis syntax, cara pertama menggunakan fungsi it(), cara yang kedua menggunakan fungsi test(), tidak jauh berbeda, dua — duanya sama — sama memiliki 2 parameter yang harus diisi, yang pertama untuk deskripsi dari testnya dan yang kedua adalah closure / isi dari testingnya, namun untuk fungsi it() untuk output descriptionnya akan ditambahkan kata “it” di depan text deskripsinya. Oke kita langsung masuk ke tahapannya:
- Pertama buatlah file bernama PestTest.php didalam folder tests/Feature
2. Menulis testing pertama kali
Nah coba temen — temen isi file PestTest.php dengan:
<?phptest('asserts true is true', function () {$this->assertTrue(true);});
Lalu jalankan perintah php ./vendor/bin/pest, maka akan mengeluarkan output:
Nah sampai sini berarti kita telah berhasil mencoba menjalankan testing unit menggunakan pest, namun untuk isi dari testingnya masih statis atau masih belum real, hanya mengeluarkan output true saja.
Coba membuat test unit mengunjungi url dengan harapan response yang didapat sesuai ekspektasi
Nah untuk testing realnya saya disini coba untuk mengakses url api/posts yang dibuat sebelumnya. Untuk menganalogikan pengaksesan url pada pest, bisa menggunakan fungsi get(), untuk contohnya seperti dibawah ini:
<?phpuse function Pest\Laravel\get;test('Api Posts Bisa Dikunjungi', function () {get('api/posts')->assertStatus(200);});
Pada kodingan di atas saya mencoba mengakses url api/posts menggunakan fungsi get() yang didapat dari Pest\Laravel\get, dimana dengan ekspektasi url yang diakses me-return status 200 atau sukses, jika kita menjalankan testnya maka outputnya adalah:
Dan hasilnya passed artinya test yang kita buat berjalan sesuai dengan output yang diinginkan, yaitu mendapatkan status 200 dari pengaksesan url api/posts.
Oke mungkin segitu saja yang bisa saya jelaskan mengenai Pest PHP ini, tidak banyak memang, masih banyak fungsi — fungsi lain yang Pest PHP sediakan yang menurut saya akan sangat berguna untuk melakukan unit testing pada aplikasi laravel maupun PHP. Namun Saya harap dengan postingan saya ini temen — temen bisa jadi lebih tertarik untuk belajar Pest PHP, dan jangan lupa keep curious 🧐.