Подтвердить что ты не робот

Принудительный тест на жасмин

Если у меня есть код в тесте, который никогда не должен быть достигнут (например, предложение fail последовательности обещаний), как я могу принудительно выполнить тест?

Я использую что-то вроде expect(true).toBe(false);, но это не так.

Альтернатива ждет завершения теста, который я хочу избежать (потому что он медленный).

4b9b3361

Ответ 1

Jasmine предоставляет глобальный метод fail(), который можно использовать внутри блоков spec it(), а также позволяет использовать собственное сообщение об ошибке:

it('should finish successfully', function (done) {
  MyService.getNumber()
  .success(function (number) {
    expect(number).toBe(2);
    done();
  })
  .fail(function (err) {
    fail('Unwanted code branch');
  });
});

Это встроенная функциональность Jasmine, и она отлично работает везде по сравнению с методом "ошибки", о котором я говорил ниже.

Перед обновлением:

Вы можете выбросить ошибку из этой ветки кода, она сразу же отключит спецификацию, и вы сможете предоставить настраиваемое сообщение об ошибке:

it('should finish successfully', function (done) {
  MyService.getNumber()
  .success(function (number) {
    expect(number).toBe(2);
    done();
  })
  .fail(function (err) {
    throw new Error('Unwanted code branch');
  });
});

Но вы должны быть осторожны, если хотите выбросить ошибку из обработчика успеха Promise then(), потому что ошибка будет проглочена там и никогда не появится. Также вы должны знать о возможных обработчиках ошибок в вашем приложении, которые могут уловить эту ошибку внутри вашего приложения, поэтому результат не сможет выполнить проверку.