私の JS ビューコードでは、jQuery UI Dialogコンポーネントを使用してポップアップをレンダリングしています。
次のようにインスタンス化します。
var popupDialog = $("#myPopupDiv").dialog({
title: "My dialog",
dialogClass: "myDialogClass",
create: createHandler,
draggable: false,
width: width,
height: height,
autoOpen: false
});
autoOpen が「false」に設定されていることに注意してください。「作成」ハンドラーで開きます。
var createHandler = function(event, ui) {
//Vi venter litt for å sikre at popupen er "klar"
setTimeout(function () {
popupDialog.dialog("open");
}, 5);
};
setTimeout
ポップアップの準備が整っていることを確認するために、open-logic は でラップされます。
コードはブラウザのアプリで正常に動作しますが、 Jasmine テスト フレームワークを使用してこのコードを実行すると、エラーが発生します。
エラー: 初期化前にダイアログでメソッドを呼び出すことはできません。メソッド「open」を呼び出そうとしました
テストは実際にパスするので、明らかにアイテムがレンダリングされます。しかし、テストを実行したときにエラーが表示されるのは好きではありません!
Jasmine テストが非常に高速に実行されるため、コンポーネントが初期化する時間がなかったのではないかと思います。では、コンポーネントが初期化されていることを確認するにはどうすればよいでしょうか? このロジックを「作成」ハンドラーに入れると、そのイベントは「ダイアログが作成されたときにトリガーされる」ので、それを処理できると思いましたが、明らかにそうではありません。
これが私がそれをテストする方法です:
it("should show my popup", function () {
var myPopupLink = $('.popupLink');
myPopupLink.click();
//Wait until popup is shown
waitsFor(function () {
return !$('.myDialogClass').is(":hidden");
}, "Popupen didn't show", 1000);
//Check that the DOM is as expected
expect($('.myDialogClass .popupContentDiv')).toExist();
expect(...
//Close popup
myPopupLink.click();
expect($('.myDialogClass .popupContentDiv')).not.toExist();
});
ポップアップダイアログの初期化ステータスを確認する方法を知っている人はいますか? または他の回避策はありますか?
ありがとう!