Jasmineでテストを実行すると、以下のエラーが発生するという問題が発生しています。問題は、一定量のテストを実行しようとすると起こるようです。特定のテストに結び付けられていないようです。一部コメントしているように、テストは合格です。一部のテストのコメントを解除すると、エラーが表示されます。以前にコメントが解除されたものをコメントアウトすると、それらはすべて再び通過します。 (つまり、赤、緑、青、オレンジのテストがあり、それが失敗した場合、合格したオレンジと青をコメントアウトしてから、青とオレンジのコメントを外して再び失敗しますが、赤と緑をコメントアウトすると再び合格します)。
Chrome 41.0.2272(Mac OS X 10.10.1)エラー一部のテストでページ全体が再ロードされました! Chrome 41.0.2272(Mac OS X 10.10.1):実行された16 of 29(1失敗)エラー(0.108秒/ 0.092秒)
私は何が起こっているのか困惑しています。さらにテストを追加すれば、それが問題になります。誰もこれに遭遇したことがありますか?私のテストではどのようなリダイレクトも行わないため、何が原因であるのか分かりません。それらはすべて、他の人のマシンで普遍的に通過します。
私の場合、問題は、ソースコードにhrefをlocationオブジェクト、window.location.href = 'somewhere';
私の仕様では、リダイレクトを行わずに文字列を返すだけのonbeforeunloadリスナーを設定しました。
beforeAll(() => {
window.onbeforeunload = () => 'Oh no!';
});
テストで、テスト対象のすべてのモジュールがモック/スパイで適切に分離されていることを確認してください。あなたが見ている振る舞いは、あなたのテストが本当に単独で実行されていないことを私に言います-それらはどこかでリロードを引き起こす何らかの状態を変えています。
ターゲットコードのどこかでwindow.location
を使用していると思います。合格するには、window.onbeforeunload
のスパイを作成するだけです
例:
window.onbeforeunload = jasmine.createSpy();
または、代わりに$window
を使用すると、これは起こりません。
最近、Karma 0.13.12でこのエラーが発生しました。 Karma 0.13.14にアップグレードし、テストが再び機能するようになりました。私にとって(そしておそらく@mqklinにとっても)問題は https://github.com/karma-runner/karma/issues/1656 と https:// github。 com/jasmine/jasmine/issues/945 。
Karmaを1.4.0から1.4.1にアップグレードし、jasmine.jsファイルのmaximumSpecCallbackDepthを20から100に変更しました。
describe
セクションの量を減らすか、完全に削除してください。理由はわかりませんが、うまくいきます。
window.location/reloadを持つ関数のスパイを作成すると、問題が修正されました
また、モジュールが2回ロードされていないことを確認する必要があります。私の場合、AngularJSモジュールファイルがありました。たとえば、auth.controller.js
どのコンテンツが既にcore.js
ファイル。カルマのバンドルファイルを除外すると、エラーは消えました。
window.location = "some url"
コード内;同様の問題に直面し、以下の変更を使用して解決しました。
コード内のwindow.locationを次のように置き換え、
window.location.assign("some url");
ユニットテストで以下を実行します。
spyOn(window.location, "assign").and.callFake(() => {
// Dummy assign call - so that your actual call will be faked and the reload will not happen.
});
このKarmaリダイレクトエラーが解決します!
var html = '<script type="text/javascript">';
html += 'window.location = "' + urlToRedirect +'"';
html += '</script>';
$( '.wrapper' ).append( html );
Ng-submitコールバックの場合、「event.preventDefault()」を呼び出さず、ブラウザはページをリロードします。そのような状況では、$ locationをモックしても役に立ちません。
私はsetTimeout(() => window.location.replace('/'), 10);
を使用していました。ユニットテストで以下のコードを使用しましたが、うまくいきました。
spyOn(global, 'setTimeout');