13

在最终发布到它的 ACTION URL 之前,我有一个表单可以执行一些广泛的 Javascript 内容。我正在编写一些 Jasmine 单元测试,并希望确保在提交表单时发生 Javascript 内容。但是,当我进行单元测试时,我绝对不希望页面转到 ACTION URL。

我在这里看到了一个不错的建议: http ://groups.google.com/group/jasmine-js/browse_thread/thread/a010eced8db17c1a?pli=1

...但是,由于我对 Jasmine 还很陌生,我不确定如何实现它,并且在网上找不到任何相关的例子。有没有人有一些我可以看的示例代码来完成我需要的?

谢谢!

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 回答