#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
вызова. Если он никогда не вызывается, тест завершится ошибкой с таймаутом.