web-dev-qa-db-ja.com

Jasmineテストでwindow.location.reloadをモックする

JavaScriptでwindow.location.reload関数を作成しました。

ループし続けるので、Jasmineでのテスト中にリロード機能をモックする必要があります。

grunt jenkinsを実行すると、テストはうまくいきます。ただし、ブラウザ(mozilla/chrome)でのテスト中はそうではありません。

これが私のコードスニペットです。

JavaScript:

window.location.reload();

ジャスミンテスト:

spyOn(window.location, 'reload').and.callFake(function(){});

誰かがこれについて私を助けてくれますか?

14

ご意見をお寄せいただきありがとうございます。

私は提案されたように回避策を実行し、それは成功しました。

Windowはブラウザオブジェクトであり、スパイできないため、関数をJavaScriptでラップし、テスト仕様でその関数を参照しました。

JavaScriptコード:

_var function = windowReload(){
    window.location.reload();
}
_

必要に応じて関数windowReload()を呼び出します。

ジャスミンテスト:

_spyOn(obj, 'windowReload').andCallFake(function(){});
_
11

常に$windowの代わりにwindow

これを試して:

$window = jasmine.createSpy('$window');

または自分で作る:

$window = {location:{reload:function(){}}};
2
mkaj

私は同じ問題に会います。 window.location = ''は、ブラウザーで実行中にinfループを引き起こします。簡単な解決策は、再読み込みを停止するためにwindow.location = '#'を設定することです。

0
wanana

これは私とBeforeEachのJamineでうまくいきました

delete window.location;
window.location = Object.create(window);
window.location.reload = () => {};
spyOn(window.location, 'reload');

そしてこれはジェストを使って働いた

delete window.location;
window.location = Object.create(window);
window.location.reload = jest.fn();
0
AngularBoy