2012-11-01 4 views
5

Ich habe eine Form, die einen Handler zum einreichen Ereignis verbunden hat, wie folgt aus:Testen eines Formulareinreichung Handler mit Jasmin jQuery

$('#myForm').bind('submit', $.proxy(this, 'form_onSubmit')); 

Ich kann nicht arbeiten, wie diese Codezeile zu testen, um sicherzustellen, Wenn das Formular gesendet wird, verwendet es den richtigen Ereignishandler. Zum Beispiel funktioniert dies nicht als die Seite selbst hält in einer Endlosschleife einreichen:

describe('Submitting the form', function() { 
    it ('Uses the correct event handler', function() { 
     spyOn(myConstructor, 'form_onSubmit'); 
     $('#myForm').trigger('submit'); 
     expect(myConstructor.form_onSubmit).toHaveBeenCalled(); 
    }); 
}); 

Ich habe auch versucht, zu verwenden: nicht in der Lage

expect($('#myForm')).toHandleWith('submit', myConstructor.form_onSubmit); 

Aber wie ich Um ein funktionierendes Beispiel zu finden, bin ich mir sicher, dass ich es falsch benutze (Jasmine wirft den Fehler "Kann nicht lesen 'submit' von undefined" wo undefined ist dies.actual.data ("events")).

Kann mir bitte jemand helfen? Ich war schon seit Stunden dabei! Vielen Dank.

+0

hmmm ... Hat 'triggerHandler ('Senden')' auch die Seite dazu führen, Postback? –

+0

Das verhindert das Postback (nie zuvor verwendet - danke!), Aber der Test schlägt leider immer noch fehl, da Jasmine denkt, dass myConstructor.form_onSubmit nicht aufgerufen wird. (Obwohl, wenn ich einen Breakpoint in den Code einfüge es tut) – user399050

Antwort

6

Ich benutze Jasmine jQuery, um das Ereignis auszuspionieren.

https://github.com/velesin/jasmine-jquery#event-spies

Auch bin spöttisch ich die Form einer Befestigung verwendet wird.

Auf dem Formular selbst (im Fixture) habe ich die Aktion auf "javascript: void (0)" gesetzt, um zu verhindern, dass die Formularübergabe stattfindet.

<form class="js-game-form" action="javascript:void(0)"> 
</form> 

Für den Test

describe("#submitForm", function(){ 
    it("should submit the form when you press one of the update buttons", function(){ 
     var spyEvent = spyOnEvent(formSelector, 'submit'); 
     $(updateButtonSelector).trigger("click"); 
     expect(spyEvent).toHaveBeenTriggered(); 
    }); 
}); 
+1

Danke für das Teilen, vor allem die Einstellung der Aktion des Formulars, um nichts zu tun ist hier entscheidend! – RSeidelsohn

+1

'" javascript: void (0) "' Hervorragender Tipp. Vielen Dank. – Hugh