Я использую supertest, chai и mocha для тестирования своего приложения Web API. У меня есть следующий код:
it('should return 500', function(done) {
this.timeout(30000);
request(server)
.get('/some/path')
.expect(500)
.end(function(err, res) {
done();
});
});
Он должен выйти из строя. Код, который запускается в запросе get
:
// Inside method getData
try {
// Get data
// throws error
} catch (e) {
// catches error and displays it
deferred.reject(e);
return deferred.promise;
}
// Other code not in getData method
dbOps.params.getData(collection, parameter, query).then(
function (arr) {
response.send(arr);
}, function (err) {
logger.error(err.message);
response.status(500).send(err.message);
}
);
Он в основном выполняет deferred.reject(e);
и отправляет ошибку в качестве ответа API. Я хотел бы поймать часть deferred.reject(e);
и в то же время продолжить цепочку .except(500).end(...).
Что-то вроде:
catch_deferred(request(server).get('/some/path'))
.expect(500)
.end(function(err, res) {
expect(err).to.equal(null);
expect(res.body).to.be.an('object').that.is.empty;
done();
Есть ли способ это сделать? Я не могу использовать блок try-catch, потому что это не исключение. Также я не могу expect().to.throw()
chai, потому что не возникает исключения.