2014-07-03 14 views
5

Chcę przetestować HTML 5 przeciągnij i upuść, co ja chociaż będzie działać:Jak testować opór HTML5 i upuść w qunit

Z pliku testowego

var event = new Event('drop',{ 
    'originalEvent':{ 
     'dataTransfer':{ 
      'getData': function(){ 
       return 'tr#0.sprint' 
      } 
     } 
    }, 
    stopPropagation': function() {return;} 
} 
$('tr#0.sprint').trigger(event); 

to tak, że zdarzenie jest wyzwalany i wszystkie funkcje są ustawione, aby zwracać to, co chcę przetestować.

rzeczywisty scenariusz:

ramy Backbone

myView = Backbone.View.extend({ 

    ... 

    drop : function(event) 
    { 
     event.stopPropagation(); 
     var data = event.originalEvent.dataTransfer.getData('element'); 

     // some code 

    }, 

    ... 

}; 

Niestety ten błąd do Illigal function call

jeśli usunąć obiekt dataTransfer i spróbuj ustawić to sam dostaję niezdefiniowany błąd

Odpowiedz

2

Jeśli ustawisz go trochę inaczej, zmieni się świat:

var event = new Event('drop',{ 
    stopPropagation: function() {return;} 
}); 
event['originalEvent'] ={ 
    'dataTransfer':{ 
     'getData': function(){ 
      return 'tr#0.sprint' 
     } 
    } 
}; 
$('tr#0.sprint').trigger(event); 

To jest bardziej "ręczny" sposób ustawiania atrybutów obiektu javascript. Argumenty dodane do konstruktora zdarzenia są sprawdzane przez konstrukcję obiektu zdarzenia.