Учебники

JasmineJS — Шпионы

Jasmine Spy — это еще одна функциональность, которая делает то же самое, что указано в ее названии. Это позволит вам шпионить за вызовами функций вашего приложения. В Жасмине есть два типа шпионских технологий. Первая методология может быть реализована с помощью spyOn (), а вторая методология может быть реализована с помощью createSpy () . В этой главе мы узнаем больше об этих двух методологиях.

spyOn ()

spyOn () встроен в библиотеку Jasmine, которая позволяет вам следить за определенным фрагментом кода. Давайте создадим новый файл спецификаций «spyJasmineSpec.js» и другой файл js с именем «spyJasmine.js». Ниже приведена запись этих двух файлов.

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

В приведенном выше фрагменте кода мы хотим, чтобы объект person говорил «Hello world», но мы также хотим, чтобы этот объект person консультировался с объектом словаря, чтобы получить выходной литерал «Hello world».

Посмотрите на файл Spec, где вы можете видеть, что мы использовали функцию spyOn (), которая фактически имитирует функциональность функций hello и world . Следовательно, мы на самом деле не вызываем функцию, а подражаем вызову функции. Это специальность шпионов. Приведенный выше фрагмент кода даст следующий вывод.

метод шпион

createSpy ()

Другой метод получения шпионской функциональности — использование createSpy (). Давайте изменим два наших js- файла, используя следующий код.

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

Посмотрите на файл спецификации, мы вызываем getName11 () объекта Person . Хотя эта функция отсутствует в объекте person в шпионе Jasmine.js , мы не получаем никаких ошибок, и, следовательно, выходные данные являются зелеными и положительными. В этом примере метод createSpy () фактически имитирует функциональность getName11 ().

Приведенный выше код сгенерирует следующий вывод.