Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mockjax未拦截异步表单提交_Javascript_Ajax_Testing_Qunit_Mockjax - Fatal编程技术网

Javascript Mockjax未拦截异步表单提交

Javascript Mockjax未拦截异步表单提交,javascript,ajax,testing,qunit,mockjax,Javascript,Ajax,Testing,Qunit,Mockjax,我正在使用qUnit和mockjax尝试处理一个简单的异步表单提交,但由于某些原因,异步POST似乎要通过mockjax test 'RuleModal closes the modal on a successful form submission event', -> $.mockjax dataType: 'json' url: '/url' type: 'post' responseText: status: 'success'

我正在使用qUnit和mockjax尝试处理一个简单的异步表单提交,但由于某些原因,异步POST似乎要通过mockjax

test 'RuleModal closes the modal on a successful form submission event', ->
  $.mockjax
    dataType: 'json'
    url: '/url'
    type: 'post'
    responseText:
      status: 'success'

  $dom = $('<div class="show-modal"><form action="/url" method="post"></form></div>')
  $form = $dom.find('form')
  modal = new RuleModal($dom)

  $form.submit()

  equal $($dom).hasClass('show-modal'), false, 'closes the modal after form submission'

我尝试对实现进行硬编码,使其与测试完全匹配,但仍然不起作用。我做错了什么?

我猜是因为你做了表单提交,然后立即做你的断言,你正在进入比赛状态。
$form.submit()
调用将在
equal…
行运行时执行并仍在运行。即使您模拟了ajax调用,它仍然是异步的。不幸的是,浏览器本机事件(如
submit
)在完成时没有任何类型的回调,因此您可能只需要围绕断言执行
setTimeout()

$form.submit();

setTimeout(function() {
    equal($($dom).hasClass('show-modal'), false, 'closes the modal after form submission');
}, 100);  // I think the default in Mockjax is 50ms
或者您可以尝试在事件处理程序中执行此操作,但我认为这也可能产生竞争条件

$form.submit();

setTimeout(function() {
    equal($($dom).hasClass('show-modal'), false, 'closes the modal after form submission');
}, 100);  // I think the default in Mockjax is 50ms