JasmineJS - Шпионы
Jasmine spy - это еще одна функция, которая выполняет то же самое, что указано в ее названии. Это позволит вам следить за вызовами функций вашего приложения. В Jasmine доступны два типа шпионских технологий. Первую методологию можно реализовать с помощью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 вspy Jasmine.js, мы не получаем никаких ошибок, поэтому результат зеленый и положительный. В этом примере метод createSpy () фактически имитирует функциональность getName11 ().
Приведенный выше код сгенерирует следующий вывод.