13

最終的にACTION URLに投稿する前に、いくつかの広範なJavascript処理を行うフォームがあります。私はいくつかの Jasmine 単体テストを作成しており、フォームが送信されたときに Javascript が発生することを確認したいと考えています。ただし、単体テスト中にページを ACTION URL に移動させたくありません。

ここで良い提案と思われるものを見ました: http://groups.google.com/group/jasmine-js/browse_thread/thread/a010eced8db17c1a?pli=1

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

ありがとう!

4

2 に答える 2

41

たぶん、このコードスニペットがあなたを助けることができます...

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

私がしていることは、基本的に、関連付けられたコールバックで false を返す特定のフォームのすべての送信を停止することです (submitCallback の動作を参照)。

次に、コールバックが呼び出されたことをテストすることもできます...

それが役に立てば幸い!

于 2011-11-07T14:45:23.890 に答える
2

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

$('form').on('submit', function() {
    return false;
});
于 2016-03-17T15:58:15.283 に答える