Skip to content

Cara Efektif Testing Endpoint API Laravel dengan Pest: Panduan Singkat

Published: at 00.00 (4 min read)

Selamat datang di dunia pengembangan web yang dinamis, dimana kode yang solid dan teruji adalah kunci sukses proyek Anda. Di era modern ini, menemukan alat dan metode yang tepat untuk menguji kode Anda bukan hanya tentang meminimalisir bug, namun juga tentang meningkatkan efisiensi pengembangan dan memastikan stabilitas aplikasi. Di artikel ini, kita akan membahas tentang bagaimana menguji JSON API Laravel menggunakan Pest, sebuah framework testing PHP yang powerful.

Table of contents

Open Table of contents

Pengenalan

Dalam pengembangan aplikasi, khususnya yang menggunakan arsitektur JSON API, memastikan bahwa setiap endpoint berfungsi sebagaimana mestinya adalah penting. Laravel, salah satu framework PHP terpopuler, disini saya menawarkan Laravel Restify yang mempermudah pembuatan API. Namun, tanpa pengujian yang tepat, kualitas endpoint yang kita buat bisa jadi dipertanyakan. Di sinilah Pest, framework testing yang dibuat khusus untuk PHP, berperan.

Checking Code Coverage

Mari kita mulai dengan memeriksa code coverage yang kita miliki saat ini dengan menggunakan command berikut:

XDEBUG_MODE=coverage php artisan test --coverage

Command ini akan memberikan kita gambaran tentang cakupan kode saat ini dan membantu kita mengidentifikasi area mana yang masih perlu peningkatan pengujian.

Code Coverage sebelum menulis test

Membuat Test

Langkah selanjutnya adalah membuat test baru untuk endpoint POST kita. Berikut adalah cara membuat berkas test baru dengan perintah artisan:

php artisan make:test ManageAuthorsTest --pest

Setelah berkas test dibuat, kita bisa mulai menulis kode tes. Berikut ini contoh simple untuk tes endpoint POST:

Skenario: Positive Test

use App\Models\User;

use function Pest\Laravel\postJson;

it('can store an author', function () {
    $user = User::factory()->create();

    $this->actingAs($user);

    $name = 'John Doe';
    $response = postJson('/api/v1/authors', compact('name'));
    $data = $response->json();

    expect($response->getStatusCode())->toBe(201)
        ->and($data)->name->toBe($name)
        ->and($data)->id->toBeString();

    $this->assertDatabaseHas('authors', compact('name'));
});

Pada contoh di atas, kita menggunakan helper it dari Pest untuk mendefinisikan test case. Selanjutnya, kita melakukan request POST ke endpoint /api/v1/authors dan mengecek apakah response yang diterima sesuai dengan yang diharapkan, yaitu status 201 dan nama author yang tersimpan harus sesuai.

Skenario: Negative Test

...
it('can do not store an author', function (?string $name) {
    $user = User::factory()->create();

    $this->actingAs($user);

    $response = postJson('/api/v1/authors', compact('name'));
    $data = $response->json();
    $errors = $data['errors'];

    expect($response->getStatusCode())->toBe(422)
        ->and($data)->message->toBe('The name field is required.')
        ->and($errors)->toBeArray()
        ->and($errors['name'])->toBeArray()
        ->and($errors['name'][0])->toBe('The name field is required.');

    $this->assertDatabaseCount('authors', 0);
})->with([null, '', '  ']); 

Di sini, kita menambahkan test case untuk mengecek apakah endpoint bisa menangani request yang tidak valid dengan benar. Kita menggunakan chaining ke fungsi with untuk menentukan payload yang akan digunakan dalam test case, yaitu null, string kosong, dan string yang hanya berisi spasi. Dengan cara ini, kita bisa memastikan bahwa endpoint kita bisa menangani request yang tidak valid dengan benar.

Anatomi of a Test

Penting untuk memahami struktur dasar sebuah test, yang biasanya terdiri dari tiga bagian: Given, When, dan Then:

Mengikuti struktur ini akan membantu kita membuat test case yang jelas dan mudah dipahami.

Validasi dan Kesimpulan

Setelah test dibuat, mari kita lakukan validasi apakah cakupan kode kita sudah meningkat atau belum dengan menggunakan command sebelumnya:

XDEBUG_MODE=coverage php artisan test --coverage

Melakukan ini akan menampilkan hasil test dan kita bisa melihat apakah test case kita berhasil atau tidak, serta melihat perubahan pada code coverage.

Code Coverage setelah menulis test

Dari hasil test di atas, kita bisa melihat bahwa code coverage kita sudah meningkat. Dengan demikian, kita bisa lebih yakin bahwa endpoint yang kita buat sudah teruji dengan baik. Namun, capaian untuk berkas AuthorController masih belum 100%. Kita bisa menambahkan test case untuk endpoint lainnya, seperti GET, PUT, dan DELETE untuk mencapai code coverage yang lebih baik.

Penutup

Melakukan pengujian pada endpoint API Laravel menggunakan Pest adalah langkah penting dalam memastikan kualitas kode yang kita kembangkan. Dengan mengikuti panduan ini, kita dapat meningkatkan code coverage, memperbaiki kualitas pengembangan, dan menjamin stabilitas kode.

Terima kasih telah membaca, dan semoga informasi yang dibagikan bisa memberikan wawasan baru dalam pengembangan aplikasi Laravel Anda. Jangan lupa terus belajar dan mengasah kemampuan pengembangan Anda. Sampai jumpa di artikel berikutnya!