Я пытаюсь написать приложение в узле, которое сначала проанализирует json stirng, подтвердите, содержит ли эта строка необходимые пары ключ/значение и в конечном итоге больше обрабатывает эти данные , Мы используем async.waterfall для вызова наших функций, так как результат должен быть передан от одной функции к другой.использование и использование узла eventEmitter в вызове async.waterfall
Проблема, с которой я сталкиваюсь, заключается в том, что я считаю. Я хотел бы исправить сообщение об ошибке или успешное сообщение в качестве части окончательного обратного вызова водопада, но независимо от того, что я делаю, я не могу понять, что это сообщение. Важные части моего файла выглядит следующим образом:
var MetadataIngester = function() {
var status, returnValue;
eventEmitter.call(this);
}
util.inherits(MetadataIngester, eventEmitter);
MetadataIngester.prototype.sendEvent = function(eventType, eventMessage) {
this.emit(eventType, eventMessage);
}
MetadataIngester.prototype.clobber = function(itemString) {
var self = this;
var asyncParseItem = self.parseItem;
var asyncValidateItem = self.validateItem;
var asyncSendvent = self.sendEvent;
async.waterfall(
[
function(callback) {
asyncParseItem(itemString, callback);
},
asyncValidateItem
],
function(err, result) {
if (err) {
asyncSendEvent.call(self, 'wtf', result);
} else {
asyncSendEvent.call(self, 'success', {
'remedia_id': 123
});
}
}
);
Чтобы проверить это, я делаю следующее:
describe("#clobber", function() {
it('should emit an error event if item has not been inserted', function() {
item = "{}";
metadata.on('wtf', errorSpy);
metadata.clobber(item);
expect(errorSpy).to.have.been.called;
});
});
describe("#sendEvent", function() {
it('should emit an wtf event if an error event type is passed in', function() {
metadata.on('wtf', errorSpy);
metadata.sendEvent('wtf', {'ihateyou': 'wtf'});
expect(errorSpy).to.have.been.called;
});
});
Когда я запускаю первый тест, то генерируется событие, но шпион никогда не называется. Однако, если я вызываю функцию, которая испускает событие напрямую, как в случае второго теста, он работает отлично, и я не уверен, почему. Мне нужно получить события, захваченные тестовым файлом, так как в конечном итоге я буду использовать этот MetadataIngester с очередью, которая вытаскивает сообщения из очереди, и этот потребитель вызывает то, что вызывает этот файл, и ожидает повторных событий, чтобы он знал, что делать дальше.
Любая помощь будет принята с благодарностью.
Примечание 'вар asyncSendvent' пишется иначе, чем' asyncSendEvent' позже при вызове. – Kenan
Чтобы лучше помочь вам, было бы хорошо посмотреть, какие функции вы вызываете и как определяются шпионы. Может быть, вы можете создать скрипку? Может быть, это просто проблема с областью, я дал ответ, чтобы сделать пример кода. – Sonata