JasmineJS - blocos de construção de teste

Neste capítulo, discutiremos os blocos de construção do teste de Jasmine.

Bloco de Suítes

Jasmine é uma estrutura de teste para JavaScript. Suiteé o bloco de construção básico da estrutura Jasmine. A coleção de casos de teste de tipo semelhante escritos para um arquivo ou função específica é conhecida como um conjunto. Ele contém dois outros blocos, um é“Describe()” e outro é “It()”.

Um bloco Suite pode ter apenas dois parâmetros, um “name of that suite” e outro “Function declaration” que realmente faz uma chamada para a funcionalidade de nossa unidade que será testada.

No exemplo a seguir, criaremos um conjunto que testará a unidade adicionar função em add.jsArquivo. Neste exemplo, temos nosso arquivo JS denominado“calculator.js” que será testado por meio do Jasmine, e o arquivo de especificação Jasmine correspondente é “CalCulatorSpec.js”.

Calculator.js

window.Calculator = { 
   
   currentVal:0,  
   varAfterEachExmaple:0, 
   
   add:function (num1) { 
      this.currentVal += num1; 
      return this.currentVal;    
   },     
   
   addAny:function () {    
      var sum = this.currentVal; 
		
      for(var i = 0; i < arguments.length; i++) { 
         sum += arguments[i]; 
      } 
      
      this.currentVal = sum; 
      Return  this.currentVal; 
   }, 
};

CalCulatorSpec.js

describe("calculator",function() { 
   
   //test case: 1  
   it("Should retain the current value of all time", function () {
      expect(Calculator.currentVal).toBeDefined();
      expect(Calculator.currentVal).toEqual(0);  
   }); 
   
   //test case: 2  
   it("should add numbers",function() {
      expect(Calculator.add(5)).toEqual(5); 
      expect(Calculator.add(5)).toEqual(10);  
   });         
    
   //test case :3   
   it("Should add any number of numbers",function () {
      expect(Calculator.addAny(1,2,3)).toEqual(6); 
   }); 
});

Na função acima, declaramos duas funções. Funçãoadd irá adicionar dois números dados como um argumento para essa função e outra função addAny deve adicionar quaisquer números fornecidos como argumento.

Depois de criar este arquivo, precisamos adicionar este arquivo em “SpecRunner.html”dentro da seção da cabeça. Na compilação bem-sucedida, isso gerará a seguinte saída como resultado.

Bloco de suítes aninhadas

O bloco de suítes pode ter muitos blocos de suítes dentro de outro bloco de suítes. O exemplo a seguir mostrará como podemos criar um bloco de suíte diferente dentro de outro bloco de suíte. Vamos criar dois arquivos JavaScript, um nomeado como“NestedSpec.js” e outro nomeado como “nested.js”.

NestedSpec.js

describe("nested",function() { 
   
   // Starting of first suite block  
   // First block    
	
   describe("Retaining values ",function () {
   
      //test case:1    
      it ("Should retain the current value of all time", function () { 
         expect(nested.currentVal).toBeDefined();   
         expect(nested.currentVal).toEqual(0);   
      });    
   }); //end of the suite block   

   //second suite block 
   describe("Adding single number ",function () {     
   
      //test case:2 
      it("should add numbers",function() { 
         expect(nested.add(5)).toEqual(5); 
         expect(nested.add(5)).toEqual(10); 
      });         
   }); //end of the suite block  

   //third suite block 
   describe("Adding Different Numbers",function () {  
   
      //test case:3 
      it("Should add any number of numbers",function() {  
         expect(nested.addAny(1,2,3)).toEqual(6);  
      });    
   }); //end of the suite block 
});

Nested.js

window.nested = { 
   
   currentVal: 0,
	
   add:function (num1) {  
      this.currentVal += num1;     
      return this.currentVal;    
   },
   
   addAny:function () { 
      Var sum = this.currentVal; 
		
      for(var i = 0;i < arguments.length; i++) { 
         sum += arguments[i]; 
      } 
		
      this.currentVal = sum; 
      return this.currentVal;    
   }  
};

O trecho de código acima irá gerar a seguinte saída como resultado da execução specRunner.html depois de adicionar este arquivo dentro da seção head.

Descrever Bloco

Conforme discutido anteriormente, o bloco de descrição é uma parte do bloco Suite. Como o bloco Suite, ele contém dois parâmetros, um“the name of the describe block” e outro “function declaration”. Em nossos próximos exemplos, examinaremos muitos blocos de descrição para entender o fluxo de trabalho do bloco de suíte Jasmine. A seguir está um exemplo de um bloco de descrição completo.

describe("Adding single number ",function () { 
   
   it("should add numbers",function() { 
      expect(nested.add(5)).toEqual(5); 
      expect(nested.add(5)).toEqual(10); 
   });     
}

Bloco de TI

Como o bloco de descrição, também fomos apresentados ao bloco de TI. Ele fica dentro de um bloco de descrição. Este é o bloco que realmente contém cada caso de teste de unidade. No código a seguir, há pedaços deIT bloco dentro de um describe quadra.

describe("Adding single number ",function () { 
   
   // test case : 1   
   it("should add numbers",function() {  
      expect(nested.add(5)).toEqual(5); 
      expect(nested.add(5)).toEqual(10); 
   });         
    
   //test case : 2 
   it("should add numbers",function() { 
      expect(nested.addAny(1,2,3)).toEqual(6); 
   });     
}

Expect Block

Jasmim Expectpermite que você escreva sua expectativa a partir da função necessária ou do arquivo JavaScript. Vem sobITquadra. Um bloco de TI pode ter mais de um bloco Expect.

A seguir está um exemplo de bloco Expect. Este bloco expect fornece uma ampla variedade de métodos para testar a unidade de sua função JavaScript ou arquivo JavaScript. Cada bloco Expect também é conhecido como ummatcher. Existem dois tipos diferentes de matchers, uminbuilt matcher e outro user defined matchers.

describe("Adding single number ",function () {   
   
   // test case : 1 
   it("should add numbers",function() {
      expect(nested.add(5)).toEqual(5); 
      expect(nested.add(5)).toEqual(10);
   });          
   
   //test case : 2 
   it("should add numbers",function() {
      expect(nested.addAny(1,2,3)).toEqual(6); 
   });     
}

Nos próximos capítulos, discutiremos vários usos de diferentes métodos embutidos do bloco Expect.