Jasminejs-spies

提供:Dev Guides
移動先:案内検索

JasmineJS-スパイ

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

spyOn()

spyOn()はJasmineライブラリに組み込まれているため、特定のコードをスパイできます。 新しい仕様ファイル「spyJasmineSpec.js」と、「spyJasmine.js」という名前の別の 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オブジェクトに「Hello world」と言うようにしたいのですが、出力リテラル「Hello world」を提供するには、personオブジェクトに辞書オブジェクトと相談する必要があります。

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

spyOnメソッド

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

specファイルを見てください。 Person オブジェクトの* getName11()を呼び出しています。 この関数は *spy Jasmine.js のpersonオブジェクトには存在しませんが、エラーは発生していないため、出力は緑で正です。 この例では、createSpy()メソッドは実際にgetName11()の機能を模倣しています。

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

CreateSpy