2012-11-01 8 views
5

は、私は、提出イベントにアタッチハンドラを持つフォームを持っている:このようにテストジャスミンjQueryを使ってフォーム送信ハンドラ

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

私が保証するために、このコード行をテストする方法を考え出すことはできませんフォームが送信されると、正しいイベントハンドラが使用されます。

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

私も使用しようとしてきた:

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

しかし、私はできなかったように、ページが無限ループに自分自身を送信し続けるようたとえば、これは動作しません。私はそれを間違って使用していると確信しています(Jasmineは「未定義のthis.actual.data( "events")がどこにあるのかプロパティ "submit 'を読むことができません)。

誰でもお手伝いできますか?私は何時間もそれをしてきました!ありがとう。

+0

については

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

なるほど... 'triggerHandler( '提出')ん'もページがポストバックを引き起こしますか? –

+0

これは、ポストバックが発生しないようにしています(以前はこれを使用しませんでした - ありがとう!)残念ながら、JasmineはmyConstructor.form_onSubmitが呼び出されないと思っているのでテストは失敗します。 (ただし、コードにブレークポイントを入れても) – user399050

答えて

6

ジャスミンjQueryを使用してイベントを偵察しています。

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

また、私は、固定具を使用してフォームをからかっています。

フォーム自体に(フィクスチャ内で)フォームの送信が行われないように、アクションを「javascript:void(0)」に設定しました。テスト

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

これを共有していただきありがとうございます。特に何もしないようにフォームのアクションを設定することが重要です! – RSeidelsohn

+1

'' javascript:void(0) ''優れたヒント。ありがとう。 – Hugh

関連する問題