1

QUnitは初めてです。jQuery(1.4.2および1.5.1でテスト済み)と最新のQUnitを使用しています。1回のテストでイベントを正常にトリガーできますが、その後のテストは失敗します。簡略化した再現は次のとおりです。

// code under test - "#Test1" is just an empty div
$(document).ready(function() {
  $('#Test1').mouseenter(function(e) { console.log('ENTER');});
  $('#Test1').mouseleave(function(e) { console.log('LEAVE');});
});

// tests
test('enter', function() {
    $('#Test1').mouseenter();
});

test('leave', function() {
    $('#Test1').mouseleave();
});

テストを実行すると、コンソールはENTERのみを出力します。ただし、単一のテストを使用する場合...

test('enterleave', function() {
    $('#Test1').mouseenter();
    $('#Test1').mouseleave();
});

...コンソールはENTERとLEAVEを出力します。QUnitのtriggerEvent、jQuery.triggerなどを使用してみましたが無駄になりました。この問題は、複数のブラウザで再現されます。イベントを正しくテストしていますか?

ここで完全な再現:http://jsbin.com/obehu5/edit

4

3 に答える 3

2

トリガーが発生すると、QUnitは要素のイベントバインディングをクリアしているように見えます。「init」コードをQUnitセットアップに移動することで、この問題を修正しました。これが良い習慣かどうかはわかりませんが、問題は解決したようです。上記のサンプルも修正しました:http://jsbin.com/obehu5/5/

于 2011-03-18T21:45:25.323 に答える
0

IDをクラスに変更します。ページごとに許可されるのはi個の一意のIDのみであるため、jqueryは最初のIDの処理を停止し、2回目の発生時に関数が起動されることはありません。

$(document).ready(function(){

    //change the id to a class
    $(".test1").mouseenter(function(){
        console.log("enter");
    });

    $(".test1").mouseleave(function(){
        console.log("leave");
    });

});
于 2011-03-18T17:31:45.613 に答える
0

最初にイベントオブジェクトを作成してみてください

例、

var e = jQuery.Event("keydown", true);
e.which = 40;  // down key
e.stopImmediatePropagation();

それからあなたのテストで

$('#testEmpty').trigger( e ); // down  

stopImmediatePropagationがないと、複数の呼び出しが原因でテストも失敗していました。これは少し役立つかもしれません。

于 2011-10-18T14:08:18.840 に答える