JasmineJS - Spies

Jasmine Spy è un'altra funzionalità che ha la stessa identica funzione del nome. Ti consentirà di spiare le chiamate alle funzioni dell'applicazione. Ci sono due tipi di tecnologia di spionaggio disponibili in Jasmine. La prima metodologia può essere implementata utilizzandospyOn() e la seconda metodologia può essere implementata utilizzando createSpy(). In questo capitolo impareremo di più su queste due metodologie.

spiare()

spyOn () è integrato nella libreria Jasmine che ti permette di spiare un determinato pezzo di codice. Creiamo un nuovo file delle specifiche "spyJasmineSpec.js" e un altrojsfile denominato "spyJasmine.js". Di seguito è riportato l'inserimento di questi due file.

SpyJasmine.js

var Person = function() {}; 

Person.prototype.sayHelloWorld = function(dict) { 
   return dict.hello() + " " + dict.world(); 
}; 

var Dictionary = function() {}; 

Dictionary.prototype.hello = function() { 
   return "hello"; 
}; 

Dictionary.prototype.world = function() { 
   return "world"; 
};

SpyJasmineSpec.js

describe("Example Of jasmine Spy using spyOn()", function() { 
  
   it('uses the dictionary to say "hello world"', function() { 
      var dictionary = new Dictionary; 
      var person = new Person; 
		
      spyOn(dictionary, "hello");  // replace hello function with a spy 
      spyOn(dictionary, "world");  // replace world function with another spy 
		
      person.sayHelloWorld(dictionary);
      expect(dictionary.hello).toHaveBeenCalled();  
      // not possible without first spy 
  
      expect(dictionary.world).toHaveBeenCalled();  
      // not possible withoutsecond spy 
   }); 
});

Nella parte di codice sopra, vogliamo che l'oggetto persona dica "Hello world" ma vogliamo anche che l'oggetto persona si consulti con l'oggetto dizionario per darci l'output letterale "Hello world".

Dai un'occhiata al file Spec dove puoi vedere che abbiamo usato la funzione spyOn (), che in realtà imita la funzionalità del hello e worldfunzione. Quindi, non stiamo effettivamente chiamando la funzione ma imitando la chiamata di funzione. Questa è la specialità di Spies. La parte di codice precedente produrrà il seguente output.

createSpy ()

Un altro metodo per ottenere la funzionalità di spionaggio è usare createSpy (). Modifichiamo i nostri duejs file utilizzando il codice seguente.

SpyJasmine.js

var Person = function() {};    

Person.prototype.sayHelloWorld = function(dict) { 
   return dict.hello() + " " + dict.world(); 
}; 

var Dictionary = function() {}; 

Dictionary.prototype.hello = function() { 
   return "hello"; 
}; 

Dictionary.prototype.world = function() { 
   return "world"; 
};

SpyJasmineSpec.js

describe("Example Of jasmine Spy using Create Spy", function() { 
   
   it("can have a spy function", function() { 
      var person = new Person(); 
      person.getName11 = jasmine.createSpy("Name spy"); 
      person.getName11(); 
      expect(person.getName11).toHaveBeenCalled(); 
   }); 
});

Dai un'occhiata al file delle specifiche, stiamo chiamando il file getName11() del Personoggetto. Sebbene questa funzione non sia presente nell'oggetto persona inspy Jasmine.js, non stiamo ottenendo alcun errore e quindi l'output è verde e positivo. In questo esempio, il metodo createSpy () imita effettivamente la funzionalità di getName11 ().

Il codice precedente genererà il seguente output.