Я работаю с mongojs
и письменно тестирует mocha
пробег покрытия с istanbul
. Моя проблема в том, что я хотел бы включить тестирование ошибок db.Интеграционное тестирование с mongojs для покрытия ошибок базы данных
var mongojs = require('mongojs');
var db = mongojs.connect(/* connection string */);
var collection = db.collection('test');
...
rpc.register('calendar.create', function(/*... */) {
collection.update({...}, {...}, function (err, data) {
if (err) {
// this code should be tested
return;
}
// all is good, this is usually covered
});
});
тест выглядит следующим образом
it("should gracefully fail", function (done) {
/* trigger db error by some means here */
invoke("calendar.create", function (err, data) {
if (err) {
// check that the error is what we expect
return done();
}
done(new Error('No expected error in db command.'));
});
});
Существует достаточно сложная настройка сценарий, который настраивает среду для тестирования интеграции. Нынешнее решение состоит в том, чтобы отключить базу данных с помощью db.close()
и запустить тест, в результате чего получится ошибка. Проблема с этим решением возникает, когда все остальные тесты после этого требуют соединения с базой данных, поскольку я пытаюсь восстановить соединение без успеха.
Любые идеи о том, как это решить аккуратно? Предпочтительно без написания пользовательских ошибок, которые могут не быть подняты следующей версией mongojs
. Или есть лучший способ структурирования тестов?
Это имеет смысл. Тем не менее, я как бы надеялся на некоторое встроенное инициирование ошибок, которое смоделировало бы ряд реальных ошибок. Я просто позволю этому вопросу задержаться на некоторое время, прежде чем я приму это как ответ, но спасибо за быстрый ответ! –
Я вижу, что @AndreasNiedermair отредактировал мой вопрос, чтобы удалить ссылку на mongojs, на более общий случай простого тестирования, который в этом случае может и не быть тем, чем я был. Думаю, моя проблема не такая обычная, как я ожидал. –
Я думаю, что если вы пытаетесь протестировать обработку ошибок, самый простой способ - высмеять и вернуть ошибку, но это просто ИМХО ... Я не знаю вашего сценария. –