私は Jasmine を使用しており、どのオブジェクトにも関連付けられていない (つまりグローバルである) 関数が多数含まれるライブラリ js ファイルがあります。これらの関数をスパイするにはどうすればよいでしょうか?
オブジェクトとして window/document を使用しようとしましたが、関数が呼び出されてもスパイは機能しませんでした。次のように偽のオブジェクトでラップすることも試しました。
var fakeElement = {};
fakeElement.fakeMethod = myFunctionName;
spyOn(fakeElement, "fakeMethod");
そしてテストする
expect(fakeElement.fakeMethod).toHaveBeenCalled();
スパイが機能しなかったため、これも機能しません。
ベストアンサー1
関数を定義する場合:
function test() {};
これは次のものと同等です:
window.test = function() {} /* (in the browser) */
それでspyOn(window, 'test')
動作するはずです。
そうでない場合は、次のことも可能です。
test = jasmine.createSpy();
いずれも機能しない場合は、セットアップに何か他の問題があります。
舞台裏で何が起こっているかを考えると、あなたのテクニックは機能しないと思いますfakeElement
。元の globalMethod は依然として同じコードを指し示しています。スパイはそれをプロキシしますが、オブジェクトのコンテキスト内でのみ行われます。テスト コードを fakeElement 経由で呼び出すことができれば機能しますが、その場合、グローバル関数を放棄することができます。