5

次のように、送信イベントにハンドラーがアタッチされたフォームがあります。

$('#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 は「undefined のプロパティ 'submit' を読み取れません」というエラーをスローしています。データ(「イベント」))。

誰でも助けてもらえますか?私は何時間もそれに取り組んできました!ありがとう。

4

1 に答える 1

8

Jasmine jQuery を使用してイベントをスパイしています。

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

また、フィクスチャを使用してフォームをモックしています。

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

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

テストのために

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();
    });
});
于 2013-03-10T22:48:10.803 に答える