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.
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:
- Given: Kita mempersiapkan semua yang diperlukan untuk melakukan test.
- When: Melakukan aksi yang ingin kita test.
- Then: Memverifikasi bahwa hasilnya sesuai dengan yang diharapkan.
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.
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!