2012-04-19 10 views
9

Tôi đã hàm sau đó làm việcExpectations Lỗi trong Jasmine

file spec
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" 

Các hoa nhài như sau:

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"))); 
    }); 
}); 

Các thử nghiệm nắm tay hoạt động tuyệt vời, cho một thứ hai tôi nhận được một thất bại kiểm tra.
Tôi nên xử lý lỗi dự kiến ​​như thế nào trong Jasmine?

+0

Để vượt qua đối số chức năng đang được thử nghiệm, mà không sử dụng một chức năng ẩn danh, hãy thử 'Function.bind': http://stackoverflow.com/a/13233194/294855 –

+0

có thể trùng lặp của [Làm thế nào để viết một bài kiểm tra mà dự kiến ​​một lỗi sẽ được ném] (http://stackoverflow.com/ câu hỏi/4144686/cách-để-viết-một-bài kiểm tra-mà-hy vọng-một-lỗi-to-be-ném) –

Trả lời

16

Như đã thảo luận trong this question, mã của bạn không làm việc vì bạn phải vượt qua một đối tượng chức năng để hy vọng chứ không phải là kết quả của việc gọi 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"))); 
    });