Идиоматическое тестирование, когда.js обещает с Жасмин

Я пишу несколько тестов Jasmine для кода, который возвращает when.js обещания. Я постоянно нахожу, что пишу такой код:

doMyThing().then(function(x) {
  expect(x).toEqual(42);
  done();
}).otherwise(function() {
  expect(true).toBe(false);
  done();
});

Единственный способ поймать исключение с помощью otherwise() функция (это более старая версия when.js), а затем, кажется, нет функции Jasmine (2.0), чтобы сказать "обнаружен сбой" - отсюда и клудж "expect(true).toBe(false)".

Есть ли более идиоматический способ сделать это?

2 ответа

Решение

После более внимательного изучения документации и понимания того, что мы используем Jasmine 2.3, я вижу, что мы можем использовать fail() функция, которая значительно упрощает вещи. Пример в вопросе становится:

doMyThing().then(function(x) {
  expect(x).toEqual(42);
}).otherwise(fail).then(done);

Если doMyThing() выдает исключение, что Ошибка передается fail() который печатает трассировку стека.

это .otherwise(fail).then(done); оказывается довольно удобной идиомой.

Вам следует подумать о тестирующей библиотеке с поддержкой обещаний, такой как Mocha, или с использованием помощника, такого как jasmine-as-обещал, который дает вам этот синтаксис. Это позволит вам сделать что-то вроде:

// notice the return, and _not_ passing `done` as an argument to `it`:
return doMyThing().then(function(x) {
  expect(x).toEqual(42);
});

По сути, возвращаемое значение проверяется как обещание, и, если это тестовая среда, проверяет, отклонено ли обещание, и обрабатывает ли это как сбой.

Другие вопросы по тегам