在Mocha Chai中测试MQTT.js套接字

问题描述

我需要验证正确的数据已发送到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 Promisesdone回调,但不能同时使用。

您不需要await即可完成订阅和触发器-运行测试时,Mocha将等待done被调用。如果从未调用,则测试将失败并超时。