2011-09-14 12 views
11

最後に、アクションURLにPOSTする前に、いくつかの広範なJavaScriptの処理を行うフォームがあります。私はいくつかのジャスミン単位テストを書いていて、フォームが提出されたときにJavascriptの処理が行われるようにしたい。しかし、私が単体テストしている間は、ページをACTION URLに移動させたくありません。Jasmineでフォーム送信をテストするにはどうすればよいですか?

私はここで良い提案のように見えたものを見た: http://groups.google.com/group/jasmine-js/browse_thread/thread/a010eced8db17c1a?pli=1

...しかし、私はジャスミンにかなり新しいですと、私はそれを実装する方法がわからないですし、ウェブ上の任意の適切な例を見つけることができません。誰かが私が必要とするものを達成するために見ることができるいくつかのサンプルコードを持っていますか?

ありがとうございます!

答えて

35

たぶん、このコードスニペットは、私は基本的にすべての(submitCallbackの振る舞いを参照してください)関連するコールバックでfalseを返す与えられたフォームの提出停止しているかどう

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(); 
}); 

...あなたを助けることができます。それから私は、テストコールバックが呼び出されていることができ

...

はそれが役に立てば幸い!

+0

まさに私が探していたものです - ありがとう! – recurser

+3

あなたはこの回答に同意する必要があります! – noazark

+0

受け入れられたアンサーがない場合は、20以上の票を持つ回答が自動的に受け付けられるはずです:)。 –

1

submitが呼び出されたことをテストしたくない場合は、スパイを作成する必要はありません。プレーンなjQueryを使用すると、フォームを送信しないという効果も得られます。私は次のコードをすべてのテストの外側に置きます。つまり、ファイル内のすべてのテストに適用されます。

$('form').on('submit', function() { 
    return false; 
}); 
関連する問題