2012-04-19 7 views
9

He la siguiente función que funcionaexpectativas de error en Jasmine

archivo 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" 

El jazmín es la siguiente:

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

La prueba puño funciona muy bien, para el segundo consigo un defecto prueba.
¿Cómo debo manejar el error esperado en Jasmine?

+0

para pasar argumentos a la función que se está probando, sin necesidad de utilizar una función anónima, intente 'Function.bind': http://stackoverflow.com/a/13233194/294855 –

+0

posible duplicado de [Cómo escribir una prueba que espera que se genere un error] (http://stackoverflow.com/ preguntas/4144686/how-to-write-a-test-which-expects-an-error-to-be-throw) –

Respuesta

16

Como se discutió en this question, su código no funciona debido a que debe pasar un objeto de función para esperar más que el resultado de llamar 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"))); 
    }); 
Cuestiones relacionadas