2012-04-19 2 views
9

У меня есть следующие функции, которая работаетожидания Ошибка в Jasmine

function sum() 
{ 
    var total = 0, 
     num = 0, 
     numArgs = arguments.length; 

    if (numArgs === 0) { 
     throw new Error("Arguments Expected"); 
    } 

    for(var c = 0; c < numArgs; c += 1) { 
     num = arguments[c]; 
     if (typeof(num) !== "number") { 
      throw new Error("Only number are allowed but found", typeof (num)); 
     } 
     total += num; 

    } 

    return total; 

} 


sum(2, "str"); // Error: Only number are allowed but found "string" 

жасмин файл спецификации выглядит следующим образом:

describe("First test; example specification", function() { 
    it("should be able to add 1 + 2", function(){ 
     var add = sum(1, 2); 
     expect(add).toEqual(3); 
    }); 
    it("Second Test; should be able to catch the excption 1 +'s'", function(){ 
     var add = sum(1, "asd"); 
     expect(add).toThrow(new Error("Only number are allowed but found", typeof("asd"))); 
    }); 
}); 

Испытание Кулак отлично работает, для второго я получаю упущение контрольная работа.
Как я должен обрабатывать ожидаемую ошибку в Jasmine?

+0

Чтобы передать аргументы функции испытывается, без использования анонимная функция, попробуйте 'Function.bind': http://stackoverflow.com/a/13233194/294855 –

+0

Возможный дубликат [Как написать тест, который ожидает, что ошибка будет сброшена] (http://stackoverflow.com/ вопросы/4144686/как к записи-а-тест-который-ожидает-ан-ошибок чтобы быть выброшены) –

ответ

16

Как обсуждалось в this question, ваш код не работает, потому что вы должны передать объект функции ожидать, а не в результате вызова (Fn)

it("should be able to catch the excption 1 +'s'", function(){ 
//  var add = sum(1, "asd"); 
     expect(function() { 
      sum(1, "asd"); 
     }).toThrow(new Error("Only number are allowed but found", typeof ("asd"))); 
    }); 
Смежные вопросы