在将我们的应用程序升级到Rails 5的过程中,我在基于Capybara的功能规范中看到了一些令人困惑的Javascript XHR请求行为。
以下是有问题的代码(CoffeeScript):
$.ajax(
url: "/foobar"
).done((_data, _status, _jqXhr) ->
# *snip* all is well
return
).fail((jqXhr) ->
# This should be 422 but is 0 instead
status = jqXhr.status
console.log("AJAX request returned with error code #{status}")
return
)
development
模式和真实浏览器(即Chromium或Firefox)中使用Rails服务器时一切正常capybara-webkit
也会报告状态0 Poltergeist(1.11.0)和PhantomJS(2.1.1)的版本保持不变。在Rails 5的宝石更新期间,Capybara从2.10.2升级到2.12.0,但我也将旧分支升级到Capybara 2.12.0,没有任何破坏,所以很可能这不是问题也是。
我能够打造出神话般的PhantomJS开发者控制台,并且在网络"面板,看到状态代码也是test
模式,422符合预期,这意味着问题必定在JavaScript-land中。
请注意,这不是跨源请求,并且请求不会中止(状态代码0的常见原因)。而且由于它在development
模式下有效,我有点困惑可能是这种行为的罪魁祸首。
我也尝试查看回调函数的其他属性和参数,以及是否可以在其他属性中找到状态代码,但是没有运气好。