📜  JasmineJS-间谍

📅  最后修改于: 2020-10-23 06:38:53             🧑  作者: Mango


茉莉间谍是另一个功能,其功能与名称所指定的完全相同。它将允许您监视应用程序函数调用。茉莉中提供了两种类型的间谍技术。第一种方法可以通过使用spyOn()来实现,第二种方法可以通过使用createSpy()来实现。在本章中,我们将学习有关这两种方法的更多信息。

暗中监视()

spyOn()内置在Jasmine库中,它使您可以监视一段确定的代码。让我们创建一个新的spec文件“ spyJasmineSpec.js”和另一个名为“ spyJasmine.js”的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 
   }); 
});

在上面的代码中,我们希望人员对象说“ Hello world”,但是我们也希望该人员对象应与字典对象进行协商,以便为我们提供输出字面量“ Hello world”。

看一下Spec文件,您可以看到我们使用了spyOn()函数,该函数实际上模仿了helloworld函数。因此,我们实际上不是在调用函数,而是在模仿函数调用。那是间谍的特长。上面的代码将产生以下输出。

spyOn方法

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

看一下spec文件,我们正在调用Person对象的getName11() 。尽管此函数在间谍Jasmine.js的person对象中不存在,但我们没有收到任何错误,因此输出为绿色且为正。在此示例中,createSpy()方法实际上模仿了getName11()的功能。

上面的代码将生成以下输出。

CreateSpy