3

qUnitに深く入り始めていますが、テストを適切に作成する方法がわからないという問題が発生しました。

この関数は基本的に、ボタンが押されたときにjQueryUIダイアログに警告します。これが私のqUnitテストです:

test( "If Text is Type, and Control is Textbox, Check Alert if Two Values are Present",  function() {

    //Add New Row
    $('.button').click();


    equal($('#jquery_ui_id').is(':visible'), true, "Prompt is Shown" );

});

問題は、テストがqUnitで合格することですが、リロード時にのみ合格します。したがって、最初にテストを実行すると常に失敗し、リロードしている間は成功します。

誰かがここで何が起こっているのか知っていますか、または以前にこれに遭遇したことがありますか?

4

2 に答える 2

4

一般に、ページをリロードするときにqUnitテストが失敗と成功を切り替える場合、テスト後に適切にクリーンアップされておらず、テストが互いに競合していることを意味します。

DOMに要素を追加し、特別な#qunit-fixture要素を使用せずにモジュールまたはテストで操作する場合は、次の要素を新たに開始できるように、そのモジュールの最後で要素を削除する必要があります。

詳細については、qUnitテストをアトミックに保つためのセクションを参照してください。

QUnitは、各テストの後に#qunit-fixture要素内の要素をリセットし、存在した可能性のあるイベントをすべて削除します。このフィクスチャ内でのみ要素を使用する限り、テスト後に要素をアトミックに保つために手動でクリーンアップする必要はありません。

于 2013-02-21T13:44:40.697 に答える
-1

同じ問題があり、要素#qunit-fixtureの下にすべてのdomをレンダリングすることは確実でした。調査していると、JQuery-UIがダイアログの要素をに直接追加していることがわかりました<body>

したがって、これを回避する1つの方法は、本体の前に#qunit-fixtureをレンダリングすることです。私の場合、本文内にjavascriptスクリプトがあり、これは#qunit-fixtureの下にありません。そのため、その前に本文からスクリプトを削除する必要があります。

<html>
   <head></head>
   <div id="qunit-fixture"><!--Wrap whole body into fixture-->
       <body>
       </body>
   </div>
</html>


別の方法は、分解で追加されたものを手動で削除することです。

module("SomeModule",
{
    teardown: function ()
    {
        $('.ui-front').remove();//Need to be reset manually, because jquery dialog add these outside of fixture...
    }
});

追加された要素をクリーンアップするために、それらすべてが「ui-front」クラスを持っているという事実を使用します。

于 2015-05-15T01:35:17.477 に答える