JasmineJS - Verificação de exceção

Além de diferentes matchers computacionais, Jasmine fornece alguns matchers úteis para verificar a exceção do programa. Vamos modificar nosso JavaScript com o seguinte conjunto de código.

var throwMeAnError = function() {   
   throw new Error(); 
};  

describe("Different Methods of Expect Block", function() {  
   var exp = 25; 

   it ("Hey this will throw an Error ", function() { 
      expect(throwMeAnError).toThrow(); 
   }); 
});

No exemplo acima, criamos um método que lança deliberadamente uma exceção desse método e, no bloco de espera, esperamos capturar o erro. Se tudo correr bem, este trecho de código produzirá a seguinte saída.

Agora, para que este caso de teste falhe, precisamos omitir a instrução throw na função throwMeAnError. A seguir está o código que produzirá uma captura de tela vermelha como saída, uma vez que o código não atende aos nossos requisitos.

var throwMeAnError = function() {   
   //throw new Error(); 
};   

describe("Different Methods of Expect Block",function() {  
   var exp = 25; 
   
   it("Hey this will throw an Error ", function() {  
      expect(throwMeAnError).toThrow();    
   }); 
});

Como pode ser visto, comentamos aquela linha de onde nosso método estava lançando a exceção. A seguir está a saída do código acima na execução bem-sucedida de SpecRunner.html.

Jasmine.Any ()

Anyé o matcher especial usado quando não temos certeza sobre a saída. No exemplo a seguir, aprenderemos como isso funciona. Vamos modificar ocustomerMatcher.js com o seguinte trecho de código.

var addAny = function() {
   var sum = this.currentVal; 
	
   for (var i = 0; i < arguments.length; i++) { 
      sum += arguments[i]; 
   } 
	
   this.currentVal = sum;  
   return this.currentVal; 
} 

describe("Different Methods of Expect Block",function () { 
   
   it("Example of any()", function() { 
      expect(addAny(9,9)).toEqual(jasmine.any(Number)); 
   });
});

Aqui, declaramos uma função que nos dará a soma dos números fornecidos como argumentos. No bloco expect, esperamos que o resultado possa ser qualquer coisa, mas deveria ser um número.

Como 9 e 9 após a soma, o rendimento 18 é um número, este teste será aprovado e gerará a seguinte captura de tela verde como uma saída.

Agora vamos mudar o código de acordo com o seguinte trecho de código, onde esperamos uma variável do tipo string como uma saída da função AddAny().

var addAny = function() { 
   var sum = this.currentVal; 
	
   for(var i = 0; i < arguments.length; i++) { 
      sum += arguments[i]; 
   } 
	
   this.currentVal = sum; 
   return this.currentVal; 
}  

describe("Different Methodsof Expect Block",function () { 
   it("Example of any()", function () { 
      expect(addAny(9,9)).toEqual(jasmine.any(String));    
   });
});

A seguir está a saída do código acima.