Тестирование MQTT.js сокет в mocha chai

#javascript #testin& #mocha.js #mqtt #chai

#javascript #тестирование #mocha.js #mqtt #чай

Вопрос:

Мне нужно убедиться, что правильные данные отправляются брокеру mqtt. Но я не могу утверждать обратный вызов внутри

     const mqtt = require('async-mqtt');

    describe('MQTT tests', function () {
        let mqttClient = null

        before(async function () {
            mqttClient = mqtt.connect('mqtt://localhost:111') 
        })
   
        it('test that spy on mqtt', async function (done) {
            mqttClient.on('messa&e', function (topic, messa&e) {
                let ms& = messa&e.toStrin&()
                console.lo&(mes)
                expect(ms&).to.equal('some messa&e')
                done()
            })
           await mqttClient.subscribe('topicToSubscribeTo')
           await tri&&erMqttRequest()
    })
  

Этот тест всегда завершается неудачей, даже если зарегистрированное значение одно и то же (в данном примере это было бы «некоторое сообщение»). Если я возвращаюсь из обратного вызова, тест всегда завершается успешно.

Ответ №1:

Это не имеет никакого отношения к mqtt. Не смешивайте Promises и done с Mocha.

Использование async в функции test приводит к тому, что она неявно возвращает Promise . Вы можете либо использовать Promises, либо done обратный вызов, но не оба сразу.

Вам не нужно await подписываться и запускать триггер для завершения — при запуске вашего теста Mocha будет ждать done вызова. Если он никогда не вызывается, тест завершится ошибкой с таймаутом.