Node Modules Mqtt Test Helpers: Panduan & Cara Pakai

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:

  1. Instalasi dependensi yang diperlukan via terminal: npm install mqtt aedes jest --save-dev
  2. Pastikan port dinamis digunakan (port 0) pada server TCP agar tidak bentrok dengan proses lain yang sedang berjalan.
  3. Gunakan fungsi beforeAll dan afterAll untuk 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 localhost atau 127.0.0.1 dengan port yang valid.
  • Client Disconnected: Periksa apakah fungsi done() dipanggil ganda dalam asersi asynchronous Jest.