Memahami Modul MQTT Test Helpers
Direktori node_modules/mqtt atau paket pustaka pendukung pengujian sering kali menyertakan utilitas atau skrip helper untuk memvalidasi fungsionalitas klien dan broker MQTT. Utilitas ini esensial bagi pengembang yang ingin melakukan pengujian otomatis (unit testing dan integration testing) pada sistem IoT tanpa harus terhubung ke broker MQTT eksternal yang sebenarnya.
Dalam ekosistem Node.js, pengujian protokol MQTT biasanya memanfaatkan server broker in-memory seperti mqtt-connection atau aedes yang digabungkan dengan pustaka asersi untuk memastikan bahwa pesan dipublish dan disubscribe dengan benar sesuai topik yang ditentukan.
Komponen Utama dalam Pengujian MQTT
Untuk membangun lingkungan pengujian yang stabil, Anda memerlukan beberapa komponen utama yang sering kali dibungkus dalam modul bantuan atau helper kustom:
| Komponen Helper | Fungsi Utama | Pustaka Pendukung Umum |
|---|---|---|
| Mock Broker | Menjalankan server MQTT lokal port acak untuk isolasi tes. | aedes, mosca |
| Client Factory | Membuat koneksi klien ganda secara cepat dengan konfigurasi otomatis. | mqtt.js |
| Topic Spy | Memantau dan merekam payload yang masuk pada topik tertentu. | Jest / Sinon.js |
Contoh Implementasi Skrip Test Helper
Berikut adalah contoh implementasi kode JavaScript menggunakan kerangka kerja pengujian Jest dan broker in-memory Aedes untuk mensimulasikan pengujian klien MQTT:
const aedes = require('aedes')();
const server = require('net').createServer(aedes.handle);
const mqtt = require('mqtt');
let port;
let client;
beforeAll((done) => {
server.listen(0, () => {
port = server.address().port;
client = mqtt.connect(`mqtt://localhost:${port}`);
client.on('connect', done);
});
});
afterAll((done) => {
client.end(true, () => {
server.close(done);
aedes.close();
});
});
test('harus bisa publish dan subscribe pesan', (done) => {
const topic = 'test/topic';
const message = 'Hello MQTT';
client.subscribe(topic, () => {
client.on('message', (t, payload) => {
if (t === topic) {
expect(payload.toString()).toBe(message);
done();
}
});
client.publish(topic, message);
});
});
Langkah Teknis Menjalankan Pengujian
Ikuti tahapan berikut untuk memastikan modul pengujian MQTT berjalan tanpa kendala di lingkungan lokal Anda:
- Instalasi dependensi yang diperlukan via terminal:
npm install mqtt aedes jest --save-dev - Pastikan port dinamis digunakan (port
0) pada server TCP agar tidak bentrok dengan proses lain yang sedang berjalan. - Gunakan fungsi
beforeAlldanafterAlluntuk mengelola siklus hidup koneksi agar mencegah kebocoran memori (memory leak) selama proses pengujian berkelanjutan.
Troubleshooting Masalah Umum
Kendala yang sering muncul saat menguji modul MQTT meliputi:
- ETIMEDOUT: Pastikan alamat broker mengarah ke
localhostatau127.0.0.1dengan port yang valid. - Client Disconnected: Periksa apakah fungsi
done()dipanggil ganda dalam asersi asynchronous Jest.