Жасмин не улавливает ошибки в Try/Catch

Я писал несколько тестов angularjs с использованием Jasmine Framework. Меня смущает документация на сайте Jasmine

Сопоставитель toThrow предназначен для проверки того, выдает ли функция исключение.

Жасмин пройдет следующий тест, если я не оберну тело submit.save в try/catch

it("should not save to server if user is invalid", function () {
    userServiceMock.user.id = false;
    expect(function () {
      submissionService.save(submission);
    }).toThrow();
   userServiceMock.user.id = 15;
});

Я не думаю, что это хорошая практика - выдавать ошибки без предложения catch. Так что я, должно быть, пишу этот тип теста неправильно. Надеясь, что кто-то может прояснить это.

Я использую gruntjs и grunt-karma для запуска своих тестов.


person user2108258    schedule 09.06.2013    source источник


Ответы (1)


Вы проверите, что ваша функция выдаст ошибку. Для этого вы не можете установить блок, который выдаст ошибку, в try catch/block, потому что тогда в этой функции не будет выдаваться ошибка, даже если она была выброшена в функции, которую вызывает ваша функция.

Что делает жасмин, так это ловит ошибка в сопоставителе toThrow, и тест будет пройден только тогда, когда был вызван блок catch в сопоставителе:

    try {
      actual();
    } catch (e) {
      threw = true;
      thrown = e;
    }
person Andreas Köberle    schedule 09.06.2013
comment
Значит, мой фактический код не должен быть заключен в конструкцию try/catch? - person user2108258; 11.06.2013
comment
Да, ошибка должна быть поймана из жасминового сопоставителя, иначе тест не пройден. - person Andreas Köberle; 11.06.2013
comment
Итак, я в конечном итоге прокомментирую свой блок try/catch для тестирования и удалю комментарий для выполнения actucl ?? - person Sreevisakh; 07.08.2015