Jasmine を使用してオブジェクトなしで関数をスパイする 質問する

Jasmine を使用してオブジェクトなしで関数をスパイする 質問する

私は 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 経由で呼び出すことができれば機能しますが、その場合、グローバル関数を放棄することができます。

おすすめ記事