2011-09-14 16 views
11

Ho una forma che fa una certa vasta roba JavaScript prima infine postando è URL AZIONE. Sto scrivendo alcuni test dell'unità Jasmine e voglio assicurarmi che le cose Javascript avvengano quando il modulo viene inviato. Tuttavia, non voglio assolutamente che la pagina passi all'URL ACTION mentre sono in fase di test unitario.Come si esegue il test di un modulo di invio in Jasmine?

ho visto quello che sembrava un buon suggerimento qui: http://groups.google.com/group/jasmine-js/browse_thread/thread/a010eced8db17c1a?pli=1

... ma, come io sono abbastanza nuovo per Jasmine, sono incerto come implementarlo e non riesce a trovare esempi pertinenti sul web. Qualcuno ha qualche codice di esempio che potrei guardare per ottenere ciò che mi serve?

Grazie!

risposta

35

Forse questo frammento di codice può aiutare ...

it('calls ajax post on export button click', function() { 
    view.render(); 
    var form = $('#export_images_xml_form'); 
    var submitCallback = jasmine.createSpy().andReturn(false); 
    form.submit(submitCallback); 

    $('#export_images_xml_button').click(); 

    expect(form.attr('action')).toEqual('/export'); 
    expect($('#export_images_xml_form input').attr('value')).toEqual('22,33,44'); 
    expect(submitCallback).toHaveBeenCalled(); 
}); 

Quello che faccio è fondamentalmente fermandosi ogni presentare per la forma data di ritorno falso nel callback associato (vedi comportamento submitCallback).

Poi posso anche test di callback è stato chiamato ...

Speranza che aiuta!

+0

Esattamente quello che stavo cercando - grazie! – recurser

+3

Devi accettare questa risposta! – noazark

+0

Potrebbe mi risponde che hanno 20 o più fino voti debbano automaticamente essere autorizzati, se non ci sono ansers accettate .. :) –

1

Se non si desidera verificare che submit è stato chiamato, non è necessario creare una spia. Con jQuery normale, puoi anche ottenere l'effetto di non inviare il modulo. Inserisco il seguente codice al di fuori di tutti i test, in questo modo si applica a tutti i test all'interno del file.

$('form').on('submit', function() { 
    return false; 
}); 
Problemi correlati