Асинк Jasmine-узла не понимает ошибки кода
Я пытаюсь жасмин-узел с асинхронным:
it('should not be dumb', function(done){
Promise.resolve(0).then(function(){
console.log('dumb');
expect(2).toEqual(2);
done();
});
});
возвращает:
dumb
.
Finished in 0.026 seconds
1 test, 1 assertion, 0 failures, 0 skipped
Но как-то, если у меня есть ошибка в моем коде:
it('should not be dumb', function(done){
Promise.resolve(0).then(function(result){
console.log('dumb');
expect(2,toEqual(2));
done();
}, function (err){console.log(err); done()});
});
Он просто сидит там до истечения времени ожидания без какого-либо полезного вывода:
dumb
Pairing user stories - 7816 ms
should not be dumb - 7815 ms
Failures:
1) Pairing user stories should not be dumb Message:
timeout: timed out after 5000 msec waiting for spec to complete Stacktrace:
undefined
Finished in 46.884 seconds 1 test, 1 assertion, 1 failure, 0 skipped
Что я делаю неправильно?
1 ответ
Решение
Предположим это:
promise.then(onResolve, onReject)
onReject
будет называться, когда promise
отклонено Однако в вашем коде отклонение происходит в onResolve
(неявно, из-за ошибки), которая не влияет promise
(который уже был решен в тот момент) и, следовательно, не будет вызывать onReject
,
Если вы хотите поймать ошибки в onResolve
вам нужно обработать их, добавив еще один обработчик отклонения в цепочку обещаний:
Promise.resolve(0).then(function(result){
console.log('dumb');
expect(2,toEqual(2));
done();
}).then(null, function (err) {
console.log(err);
done()
});
Если Promise
бывает bluebird
, вы можете сократить его, используя .catch()
:
Promise.resolve(0).then(function(result){
console.log('dumb');
expect(2,toEqual(2));
done();
}).catch(function (err) {
console.log(err);
done()
});