тестирование - Как ожидать асинхронного исключения в Jasmine/Angular2/Typcript?



angular 6 title (1)

Учитывая метод Angular2 / Typcript, который ничего не возвращает и реализует обработчик .subscribe (), который может быть запущен, например:

onSubmit() { // returns nothing
  this.service.someCall(this.someData).subscribe(
    data => {
      return Promise.reject('This is an asynchronously thrown error.');
    },
    err => {},
  );
}

(На данный момент предположим, что для этого обработчика .subscribe () есть (возможно условно) отклонение без других тестируемых побочных эффектов. Это приводит только к тому, что сообщение об ошибке поднимается вверх до вершины приложения.)

Как можно было бы проверить, что этот метод привел к отклонению обещания?

Я нашел некоторых людей с тем же вопросом, но нет изящных ответов:

Как бороться с заброшенными ошибками в асинхронном коде с Jasmine?

https://github.com/jasmine/jasmine/issues/529

https://gist.github.com/badsyntax/7769526


Я решил эту проблему, удалив метод console.error () (в этом случае я использую Sinon):

it('should throw exception from component on submit', (done) => {
  // Jasmine isn't capable of capturing an exception thrown from an *asynchronous* operation.
  // However, that error eventually finds its way to console.error(), so we can stub
  // that method and wait for it to be called.
  sandbox.stub(console, 'error').callsFake((...err) => {
    expect(err[1]).toEqual('This is an asynchronously thrown error.');
    done();
  });
  component.onSubmit();
});

Есть ли какие-либо другие / лучшие способы для этого?





jasmine