0

QUnit に基づいて自動テスト フレームワークを作成していますが、時間がかかりすぎる場合 (タイムアウト) にテストを強制終了できるようにしたいと考えています。さて、私の現在の実装は非常に単純なものです。テストの開始時に、タイマーをセットアップして待機します。<iframe>それまでにテストが終了していない場合は、失敗としてマークし、実行中のテストをリロードします。

これは、AJAX 呼び出しを待機している場合、または非同期テストが戻ってこない場合にうまく機能します。ただし、setTimeout関数は常に現在の実行スレッドの後に実行されるため、テストが無限ループに陥ったり、標準の実行に時間がかかりすぎたりしても、実際には停止せず、ただ座って待機します中断せずに回します。ループに陥った場合でも、子 (同じドメインにある) でのコードの実行をキャンセルする方法はありますか?<iframe>

4

1 に答える 1

0

親ウィンドウでタイマーを定義します-IFrameが読み込まれたら、親ウィンドウでタイマーを開始します-タイマーが切れたら、親ウィンドウでIFrameを再読み込みします。

親ページで

<script> 

function startTimer(duration) {     
    setTimeout("timedOut()",duration);
} 

function timedOut() {
       // handle time out
}

</script>  

<iframe id=myFrame></iframe> 

IFrameで

<script> 
    parent.startTimer(duration);
</script>

各ページは異なるスレッドで実行されるため、機能するはずですが、ブラウザシステム全体をロックアップするもの(無限ループ/無限再帰)があり、タスクマネージャーを関与させて再起動する必要があります。ブラウザですが、ケースの大部分をカバーする必要があります。

于 2012-05-16T17:16:01.800 に答える