2012-11-01 9 views
5

Mam formularz, który ma obsługi dołączoną do wypadku przedłożenia takiego:Testowanie obsługi przesyłania formularzy z Jasmine jQuery

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

nie mogę pracować się, jak przetestować ten wiersz kodu w celu zapewnienia że po przesłaniu formularza używa poprawnej procedury obsługi zdarzeń. Na przykład, to nie zadziała jak utrzymuje strona składając się w nieskończonej pętli:

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

Mam również próbuje użyć:

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

Ale jak nie udało aby znaleźć działający przykład tego gdziekolwiek, jestem pewien, że używam go niepoprawnie (Jasmine rzuca błąd "Nie można odczytać właściwości 'submit' of undefined" gdzie undefined to this.actual.data ("events")).

Czy ktoś może pomóc? Byłem w tym od wielu godzin! Dzięki.

+0

hmmm ... Czy 'triggerHandler ('submit')' również spowodować, że strona na ogłaszanie? –

+0

To zapobiega występowaniu odświeżania wstecznego (nigdy wcześniej tego nie używano - dziękuję!), Ale niestety test nadal się nie udaje, ponieważ Jasmine uważa, że ​​funkcja myConstructor.form_onSubmit nie jest wywoływana. (Chociaż jeśli umieściłem punkt przerwania w kodzie, to robi) – user399050

Odpowiedz

6

Używam Jasmine jQuery do szpiegowania zdarzenia.

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

Również jestem szyderczy formularz za pomocą uchwytu.

Na samym formularzu (w urządzeniu) ustawiam akcję na "javascript: void (0)", aby zapobiec przesyłaniu formularzy.

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

Do testu

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

Dzięki za podzielenie się tym, szczególnie ustawienie akcji formularza do robienia nic nie jest tutaj kluczowe! – RSeidelsohn

+1

'" javascript: void (0) "' Znakomita wskazówka. Dzięki. – Hugh

Powiązane problemy