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()の機能を模倣しています。
上記のコードは、次の出力を生成します。
