問題
Karma + Jasmine で単体テストを作成しているのですが、done(); を呼び出してもテストが完了せず、下記メッセージ
と共にタイムアウトとなってしまいます。
Error: Timeout of 2000ms exceeded.
For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
詳細
実装する機能としては、各種ブラウザで動作する modal スタイルの dialog の作成です。
昨今、window.showModalDialog() が廃止されており、諦めて自作の道を突き進んでいます。
本来、modal dialog を避けて通れれば良かったのですが、要件的にメニュー等々を不可視にして表示させないといけないパートがあり、今後も踏まえて泣く泣く自力で実装しています。
残念ながら、ブラウザを操作する人のトリガーが無い window.open() は、ブラウザが警告を出して止めてしまいます。
ちょこっとクリックする程度で済みますので、最悪そこだけ手作業で入力しても良いかと考えたのですが、どうも、<コード>に記載したようなパターンでは、done(); を呼んでも完了が認知されずタイムアウトになってしまいます。
実際にはこの後の部分でも各種単体テストがある為、いちいちタイムアウトされると効率が悪くてしかたありません。
テスト環境を制限して、ブラウザの設定を変えてポップアップを許可させても、手操作は省けますが done(); を認識しないのは変わらないようですし、少しみなさんの意見を聞いてみようかと言う事で投稿する事にしました。
コード
javascript
1describe('doit.dialog', function() { 2 it('open child window', function(done) { 3 window.onclick = function() { 4 done(); 5 }; 6 }; 7});
- 本来は、onclick で window.open() を走らせたりしますが、症状が出る最低限までコードを削っています。
あなたの回答
tips
プレビュー