Асинк 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()
});
Другие вопросы по тегам