Я пытаюсь написать тест мокки, который проходит по ошибке потока, но сбой, если поток заканчивается без ошибки.Тестирование должно проходить по ошибке потока, сбой при успешном завершении
Обнаружение ошибки не представляет проблемы, но обработчик завершения всегда вызывается, даже если поток вынужден выходить из строя. В этом коде утверждение обработчика should.exist(err)
работает корректно, но затем обработчик finish
все еще выдаёт ошибку.
describe('catch stream errors', function() {
it('should throw an error', function(done) {
var stream = failStream();
stream.on('error', function(err) {
should.exist(err);
done();
})
stream.on('finish', function() {
done(new Error('Why does this still run?'));
});
stream.write();
stream.end();
})
})
Один из способов, который кажется немного рубить, состоит в объеме errored
переменная выше обработчиков, затем перевернуть его в error
обработчика и проверьте значение в finish
обработчика. Похоже, что должен быть лучший способ справиться с этим.
var errored = false;
stream.on('error', function(err) {
should.exist(err);
errored = true;
done();
})
stream.on('finish', function() {
if (!errored) {
done(new Error('Error suppressed'));
}
});
Полный текст here.
У вас есть https://github.com/mochajs/mocha/wiki/Spies? – Sonata
Спасибо за указатель. Это должно сработать, за исключением того, что мой фактический прецедент предназначен для публичного пакета, поэтому я бы предпочел не добавлять новые зависимости. – joemaller
Возможно, есть ошибка в реализации данного потока? Откуда берется поток? – Ben