Я хотел бы проверить следующий код:вызовы функции тестирования, которые зависят от объекта, возвращенного обратного вызова
'use strict';
const amqp = require('amqplib');
const Promise = require('bluebird');
const queueManager = function queueManager() {
const amqp_host = 'amqp://' + process.env.AMQP_HOST || 'localhost';
return {
setupQueue: Promise.method(function setupQueue(queue) {
return amqp.connect(amqp_host)
.then(conn => conn.createConfirmChannel())
.tap(channel => channel.assertQueue(queue));
}),
enqueueJob: Promise.method(function enqueueJob(channel, queue, job) {
return channel.sendToQueue(queue, new Buffer(job));
}),
consumeJob: Promise.method(function consumeJob(channel, queue) {
return channel.consume(queue, msg => msg);
})
};
};
module.exports = {
create: queueManager
}
Я хочу, чтобы проверить мои setupQueue
, enqueueJob
и consumeJob
методы, чтобы убедиться, что они делают правильные вещи на сервер AMQP.
Для setupQueue
, например, я хочу, чтобы убедиться, что он использует Channel.createConfirmChannel
вместо сказать Channel.createChannel
и что это также делает Channel.assertQueue
.
Однако я не знаю, как это сделать.
Если я высмеиваю переменную amqp
с proxyquire, все, что я могу проверить, это вызов amqp.connect
. Я, вероятно, закрою его, чтобы избежать попадания на любые серверы AMQP. Но как насчет следующих утверждений? Как подключиться к объектам conn
и channel
?
Почему вы не расщепляется свои методы? Затем используйте setupQueue: setupQueue, ... Затем вы можете проверить свои методы индивидуально. – Ludo