JasmineJS-スパイ

ジャスミンスパイは、その名前が指定するのとまったく同じことを行う別の機能です。これにより、アプリケーションの関数呼び出しをスパイすることができます。ジャスミンで利用可能なスパイ技術には2つのタイプがあります。最初の方法論は、を使用して実装できますspyOn() 2番目の方法論は、 createSpy()。この章では、これら2つの方法論について詳しく学習します。

spyOn()

spyOn()はJasmineライブラリに組み込まれているため、特定のコードをスパイすることができます。新しいスペックファイル「spyJasmineSpec.js」と別のファイルを作成しましょうjs「spyJasmine.js」という名前のファイル。以下は、これら2つのファイルのエントリです。

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オブジェクトに「Helloworld」と表示させますが、personオブジェクトが辞書オブジェクトと参照して出力リテラル「Helloworld」を取得する必要もあります。

スペックファイルを見てください。ここでは、spyOn()関数を使用していることがわかります。これは、実際にはの機能を模倣しています。 hello そして world関数。したがって、実際には関数を呼び出すのではなく、関数呼び出しを模倣しています。それがスパイの得意分野です。上記のコードは、次の出力を生成します。

createSpy()

スパイ機能を取得する別の方法は、createSpy()を使用することです。2つを変更しましょう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()の機能を模倣しています。

上記のコードは、次の出力を生成します。