Implementasi Testing ExpressJS API Menggunakan Jest dan Supertest (Indonesia)

Ahmad Nurul Laiq
3 min readJun 20, 2024

--

Pengantar

Membangun API yang andal adalah hal yang sangat penting dalam pengembangan aplikasi berbasis web. Salah satu framework yang sering digunakan untuk membuat API di Node.js adalah ExpressJS. Namun, hanya membuat API saja tidak cukup; kita juga harus memastikan API tersebut berfungsi dengan baik melalui pengujian. Dalam artikel ini, kita akan membahas cara mengimplementasikan testing pada ExpressJS API menggunakan Jest dan Supertest.

Jest adalah framework pengujian yang populer di kalangan pengembang JavaScript, sementara Supertest adalah library yang digunakan untuk menguji API HTTP. Kombinasi keduanya memungkinkan kita untuk menulis tes yang mudah dipahami dan dipelihara.

Mengapa Penting untuk Menguji API?

Sebelum masuk ke dalam implementasi, mari kita bahas mengapa pengujian API sangat penting. Beberapa alasan utamanya adalah:

  1. Menjamin Kualitas: Pengujian membantu memastikan bahwa API berfungsi sesuai dengan yang diharapkan dan bebas dari bug.
  2. Meningkatkan Kepercayaan Diri: Dengan pengujian yang menyeluruh, pengembang bisa lebih percaya diri saat menambahkan fitur baru atau mengubah kode yang sudah ada.
  3. Mempermudah Pemeliharaan: Pengujian yang baik mempermudah identifikasi dan perbaikan masalah ketika aplikasi berkembang.
  4. Mendokumentasikan Perilaku API: Tes juga bisa berfungsi sebagai dokumentasi hidup dari perilaku API yang diharapkan.

Langkah-langkah Mengimplementasikan Testing dengan Jest dan Supertest

1. Menyiapkan Proyek

Pertama, kita perlu menyiapkan proyek Node.js dengan ExpressJS. Jika Anda belum memilikinya, ikuti langkah-langkah di bawah ini:

mkdir express-api-test
cd express-api-test
npm init -y
npm install express

Setelah itu, buat file app.js yang berisi kode dasar untuk aplikasi ExpressJS:

const express = require('express');
const app = express();

app.use(express.json());
app.get('/', (req, res) => {
res.status(200).send('Hello World');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
module.exports = app;

2. Menginstal Jest dan Supertest

Selanjutnya, kita akan menginstal Jest dan Supertest:

npm install --save-dev jest supertest cross-env

Pastikan juga untuk menambahkan skrip test di dalam package.json:

"scripts": {
"test": "jest --watchAll"
}

3. Menulis Tes Pertama

Buat folder tests di dalam direktori proyek Anda, lalu buat file app.test.js di dalamnya:

const request = require('supertest');
const host = 'http://127.0.0.1:3000';

describe('GET /', () => {
it('should respond with Hello World', async () => {
const res = await request(host).get('/');
expect(res.statusCode).toEqual(200);
expect(res.text).toBe('Hello World');
});
});

4. Menjalankan Tes

Sekarang, Anda bisa menjalankan tes dengan perintah berikut:

Jika semuanya berjalan dengan baik, Anda akan melihat output yang menunjukkan bahwa tes berhasil.

5. Menguji Endpoint Lain

Mari kita tambahkan beberapa endpoint lagi ke aplikasi Express kita dan buat tes untuk masing-masing.

Tambahkan endpoint baru di app.js:

app.post('/user', (req, res) => {
const { name, age } = req.body;
if (!name || !age) {
return res.status(400).send('Name and age are required');
}
res.status(201).send({ id: 1, name, age });
});

Tambahkan tes untuk endpoint baru ini di app.test.js:

describe('POST /user', () => {
it('should create a new user', async () => {
const res = await request(app)
.post('/user')
.send({
name: 'John Doe',
age: 30
});
expect(res.statusCode).toEqual(201);
expect(res.body).toHaveProperty('id');
expect(res.body.name).toBe('John Doe');
expect(res.body.age).toBe(30);
});

it('should return 400 if name or age is missing', async () => {
const res = await request(app)
.post('/user')
.send({});
expect(res.statusCode).toEqual(400);
expect(res.text).toBe('Name and age are required');
});
});

6. Menguji Middleware dan Error Handling

ExpressJS sering kali menggunakan middleware untuk mengelola permintaan dan penanganan kesalahan. Kita juga harus memastikan middleware ini diuji dengan baik.

Tambahkan middleware error handling di app.js

app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something broke!');
});

Tambahkan tes untuk middleware ini di app.test.js:

describe('Error handling', () => {
it('should handle errors', async () => {
const res = await request(host).get('/error');
expect(res.statusCode).toEqual(500);
expect(res.text).toBe('Something broke!');
});
});

Kesimpulan

Pengujian adalah aspek penting dari pengembangan perangkat lunak yang tidak boleh diabaikan. Dengan menggunakan Jest dan Supertest, kita bisa menulis tes yang kuat dan mudah dipahami untuk API ExpressJS kita. Pengujian ini tidak hanya membantu dalam menjamin kualitas kode, tetapi juga memudahkan pemeliharaan dan pengembangan di masa depan.

Dengan mengikuti langkah-langkah di atas, Anda seharusnya dapat mengatur pengujian untuk API ExpressJS Anda dengan mudah. Teruslah menambahkan lebih banyak tes saat Anda menambahkan lebih banyak fitur ke API Anda untuk memastikan semuanya berfungsi sebagaimana mestinya.

Jika Anda ingin melihat contoh kode yang lengkap, Anda dapat mengunjungi repositori GitHub saya di sini.

Referensi:

--

--

Ahmad Nurul Laiq

software engineer an have experience for 2+ years. I helping people or companies to delivering hight quality product with the latest technologies.