【问题标题】:rabbitMQ unit tests with amqplib-mocks library使用 amqplib-mocks 库进行 rabbitMQ 单元测试
【发布时间】:2019-10-25 22:16:21
【问题描述】:

我正在尝试使用amqplib-mocks 编写单元测试,但我无法使用来自消费者的消息,我得到未定义,我尝试调试但未成功。

describe("Rabbitmq testing Server", () => {
    let connection, channel;

    before(async () => {
        connection = await amqplib.connect("amqp://localhost");
        channel = await connection.createChannel();

        await channel.assertExchange(messagesExchange, exchangeType);

        isCreated = await channel.assertQueue(queue);
        isCreated.queue ? console.log('queue created') : 'Queue not created or already exist';

        await channel.bindQueue(queue, messagesExchange, routingKey);

        const isPublish = channel.publish(messagesExchange, routingKey, Buffer.from('should pass test')).valueOf();
        isPublish ? console.log('message published successfully') : 'message not published';
    });

    it("should create the channel", () => {
        assert.isObject(channel);
    });

    it("should register the method call", () => {
        expect(connection.createChannel()).to.have.been.all.keys;
        expect(connection.createChannel()).to.have.been.all.members;
    });

    it("should consumer consume message from queue", async () => {
        let result: string;
        const consumer = await channel.consume(queue, (msg) => {
            result = msg.content.toString();
            console.log(result);
        }, { noAck: true });

        // expect(result).to.be.equal(JSON.stringify({ success: true }));
    });

    after(() => {
        amqplib.reset();
    })

前两个测试通过,但第三个测试得到未定义的值。任何帮助将不胜感激。

【问题讨论】:

    标签: node.js unit-testing rabbitmq node-amqplib


    【解决方案1】:

    这是因为在执行expect 之前没有返回result

    上面代码中发生的事情是

    1. channel.consume 正在执行中
    2. expect 语句正在执行中
    3. 正在执行回调 - msg.content.toString()
    4. console.log(result) 正在执行中。

    您可以尝试将expect 放入您的回调中并使用done 声明您的测试何时完成:

    it("should consumer consume message from queue", async (done) => {
          let result: string;
          const consumer = await channel.consume(queue, (msg) => {
            result = msg.content.toString();
            console.log(result);
            expect(result).to.be.equal(JSON.stringify({ success: true }));        
            done();
          }, { noAck: true });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多