问题描述
我需要验证正确的数据已发送到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('message',function (topic,message) {
let msg = message.toString()
console.log(mes)
expect(msg).to.equal('some message')
done()
})
await mqttClient.subscribe('topicToSubscribeto')
await triggerMqttRequest()
})
即使记录的值相同,此测试也始终会失败(在此示例中,它将是“某些消息”)。如果我从回调返回,则测试始终会成功。
解决方法
这与mqtt无关。不要将Promises和Mocha混在一起。
在测试函数中使用async
使其隐式返回Promise
。您可以use Promises或done
回调,但不能同时使用。
您不需要await
即可完成订阅和触发器-运行测试时,Mocha将等待done
被调用。如果从未调用,则测试将失败并超时。