1. ホーム
  2. javascript

[解決済み] Jasmineを使って、オブジェクトを持たない関数をスパイする

2022-04-22 07:53:19

質問

私はJasmineを使い始めたばかりの初心者です。私は、どのオブジェクトにも関連しない(つまりグローバルな)関数をたくさん含むライブラリjsファイルを持っています。これらの関数を監視するには、どうすればよいのでしょうか?

オブジェクトとしてwindow/documentを使用してみましたが、関数が呼び出されたにもかかわらず、スパイが機能しませんでした。また、次のように偽のオブジェクトでラップしてみました。

var fakeElement = {};
fakeElement.fakeMethod = myFunctionName;
spyOn(fakeElement, "fakeMethod");

でテストしてください。

expect(fakeElement.fakeMethod).toHaveBeenCalled();

スパイがうまくいかなかったので、これもうまくいきません。

解決方法は?

関数を定義している場合

function test() {};

とすれば、これと同等である。

window.test = function() {}  /* (in the browser) */

だから spyOn(window, 'test') が動作するはずです。

そうでない場合も、できるはずです。

test = jasmine.createSpy();

もし、どれもうまくいかない場合は、あなたのセットアップに何か他の問題が起きている可能性があります。

を使用しないと思います。 fakeElement のテクニックは、舞台裏で起こっていることのために機能します。元のglobalMethodはまだ同じコードを指しています。スパイが行うのはそれをプロキシすることですが、それはオブジェクトのコンテキスト内だけです。もしテストコードがfakeElementを通して呼び出されるようにできればうまくいくでしょうが、その場合はグローバルFNをあきらめることになるでしょう。