2014-01-07 3 views
2

node.js에서 특정 RabbitMQ 교환이 존재하는지 여부를 확인하고 싶습니다. 저는 모카를 테스트 프레임 워크로 사용하고 있습니다. 나는 같은 코드를 작성했지만 내 기대가 잘못된 것 같다. Exchange가 없으면 교환 변수가 정의되지 않은 값을 가지기를 기대하지만 그렇지 않습니다. RabbitMQ와 상호 작용하기 위해 amqp 모듈을 사용하고 있습니다. 다음은 코드입니다.node.js에서 RabbitMQ에 교환이 있는지 확인하는 방법은 무엇입니까?

var should = require('should'); 
var amqp = require('amqp'); 

//Configuration 
var amqpConnectionDetails = { 
    'host':'localhost', 
    'port':5672, 
    'login':'guest', 
    'password':'guest' 
}; 

describe('AMQP Objects', function(){ 
    describe('Exchanges', function(){ 
     it('There should exist an exchange', function(done){ 
      var amqpConnection = amqp.createConnection(amqpConnectionDetails); 
      amqpConnection.on('ready', function(){ 
       var exchange = amqpConnection.exchange('some_exchange', {'passive':true, 'noDeclare':true}); 
       exchange.should.not.be.equal(undefined); 
       exchange.should.not.be.equal(null); 
       done(); 
      }); 
     }); 
    }); 
}); 

교환의 존재를 확인하는 올바른 방법은 무엇입니까?

감사합니다.

답변

2

교환기가 존재하지 않으면 오류가 발생합니다 ('캐치 오류 : NOT_FOUND - 가상 호스트'/ '에서 교환'some_exchange '). 즉 교환기가 존재하지 않을 때 발생하는 오류를 잡기 위해 "on error"메소드를 추가해야합니다.

두 번째로, 옵션에서 'noDeclare'를 제거해야합니다.

다음은 (교환은 존재하지 않고 교환이 존재하는 경우 예외가 발생합니다 경우가 정상적으로 종료됩니다) 작동합니다 :

var amqp = require('amqp'); 

//Configuration 
var amqpConnectionDetails = { 
    'host':'localhost', 
    'port':5672, 
    'login':'guest', 
    'password':'guest' 
}; 

describe('AMQP Objects', function(){ 
    describe('Exchanges', function(){ 
    it('There should not exist an exchange', function(done){ 
     var amqpConnection = amqp.createConnection(amqpConnectionDetails); 
     amqpConnection.on('ready', function(){ 
     var exchange = amqpConnection.exchange('some_exchange', {'passive':true}); 
     exchange.on('error', function(error) { 
      done(); 
     }); 
     exchange.on('open', function(exchange) { 
      throw("exchange exists!") 
      done(); 
     }); 
     }); 
    }); 
    }); 
});