Jasmine не улавя грешки в Try/Catch

Писах някои angularjs тестове, използвайки Jasmine Framework. Объркан съм от документацията на сайта Jasmine

Съвпадението 'toThrow' е за тестване дали дадена функция хвърля изключение

Jasmine ще премине следния тест, ако не увия тялото на submission.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;
});

Не мисля, че е добра практика да се хвърлят грешки без клауза за улов. Така че трябва да пиша този тип тест погрешно. Надявам се някой да може да изясни това.

Използвам gruntjs и grunt-karma, за да изпълнявам тестовете си.


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


Отговори (1)


Ще тествате дали вашата функция ще изведе грешка. За да направите това, не можете да зададете блока, който ще хвърли грешка в try catch/block, защото тогава не се хвърля грешка в тази функция, дори ако е била хвърлена във функция, която вашата функция извиква.

Това, което jasmine прави е да улови грешка в съпоставителя 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 за тестване и ще премахна коментара за действително изпълнение?? - person Sreevisakh; 07.08.2015