Javascript 如何在Jasmine中测试表单提交?

Javascript 如何在Jasmine中测试表单提交?,javascript,unit-testing,jasmine,form-submit,Javascript,Unit Testing,Jasmine,Form Submit,我有一个表单,在最终发布到它的动作URL之前,它会执行一些广泛的Javascript内容。我正在编写一些Jasmine单元测试,并希望确保在提交表单时发生Javascript内容。但是,在进行单元测试时,我绝对不希望页面转到操作URL 我在这里看到了一个很好的建议: …但是,由于我对Jasmine还比较陌生,我不确定如何实现它,也无法在web上找到任何相关的示例。有没有人有一些我可以看的示例代码可以完成我需要的 谢谢 也许这个代码片段可以帮助您 it('calls ajax post on e

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

我在这里看到了一个很好的建议:

…但是,由于我对Jasmine还比较陌生,我不确定如何实现它,也无法在web上找到任何相关的示例。有没有人有一些我可以看的示例代码可以完成我需要的


谢谢

也许这个代码片段可以帮助您

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行为)

然后我还可以测试回调是否被调用


希望有帮助

如果不想测试调用了
submit
,则不需要创建间谍。使用普通jQuery,还可以达到不提交表单的效果。我将以下代码放在所有测试之外,这样它将应用于文件中的所有测试

$('form').on('submit', function() {
    return false;
});

如果没有被接受的答案,我可以自动接受20票或以上的答案吗?:)不确定这是否是版本问题,但必须为我执行以下操作
jasmine.createSpy().and.returnValue(false)
@peekabo,我得到“找不到变量视图”@我们需要为这些元素创建固定装置吗?我没有定义或不知道。我还想知道如何使用这个测试的装置,想知道你是否使用jasmine查询?view.render()在哪里;来自?我在表单标签中添加了
onsubmit=“return false”