JasmineJS - สายลับ

สายลับจัสมินเป็นอีกหนึ่งฟังก์ชันที่เหมือนกับชื่อที่ระบุ จะช่วยให้คุณสามารถสอดแนมการเรียกใช้ฟังก์ชันแอปพลิเคชันของคุณ เทคโนโลยีการสอดแนมในจัสมินมีอยู่สองประเภท วิธีการแรกสามารถดำเนินการได้โดยใช้spyOn() และสามารถใช้วิธีการที่สองได้โดยใช้ createSpy(). ในบทนี้เราจะเรียนรู้เพิ่มเติมเกี่ยวกับวิธีการทั้งสองนี้

สปายออน ()

spyOn () ถูกสร้างขึ้นในห้องสมุดจัสมินซึ่งช่วยให้คุณสามารถสอดแนมรหัสที่แน่นอนได้ ให้เราสร้างไฟล์ข้อมูลจำเพาะใหม่“ 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 
   }); 
});

ในโค้ดด้านบนเราต้องการให้วัตถุบุคคลพูดว่า "สวัสดีชาวโลก" แต่เราก็ต้องการให้วัตถุบุคคลนั้นปรึกษากับวัตถุพจนานุกรมเพื่อให้ผลลัพธ์ที่เป็นตัวอักษร "สวัสดีชาวโลก"

ดูไฟล์ Spec ที่คุณจะเห็นว่าเราใช้ฟังก์ชัน spyOn () ซึ่งเลียนแบบการทำงานของ hello และ worldฟังก์ชัน ดังนั้นเราจึงไม่ได้เรียกใช้ฟังก์ชันจริง ๆ แต่เป็นการเลียนแบบการเรียกฟังก์ชัน นั่นคือความพิเศษของ Spies โค้ดด้านบนจะให้ผลลัพธ์ดังต่อไปนี้

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วัตถุ. แม้ว่าฟังก์ชันนี้จะไม่มีอยู่ในวัตถุบุคคลในspy Jasmine.jsเราไม่ได้รับข้อผิดพลาดใด ๆ ดังนั้นผลลัพธ์จึงเป็นสีเขียวและเป็นบวก ในตัวอย่างนี้เมธอด createSpy () เลียนแบบการทำงานของ getName11 ()

โค้ดด้านบนจะสร้างผลลัพธ์ต่อไปนี้