Phantomjs 轨道5+;水豚:XHR请求报告状态0

Phantomjs 轨道5+;水豚:XHR请求报告状态0,phantomjs,capybara,ruby-on-rails-5,poltergeist,capybara-webkit,Phantomjs,Capybara,Ruby On Rails 5,Poltergeist,Capybara Webkit,在将应用程序升级到Rails 5的过程中,我看到在基于Capybara的特性规范中,Javascript XHR请求出现了一些令人费解的行为 以下是相关代码(咖啡脚本): $.ajax( url: "/foobar" ).done((_data, _status, _jqXhr) -> # *snip* all is well return ).fail((jqXhr) -> # This should be 422 but is 0 instead status

在将应用程序升级到Rails 5的过程中,我看到在基于Capybara的特性规范中,Javascript XHR请求出现了一些令人费解的行为

以下是相关代码(咖啡脚本):

$.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
    模式下使用Rails服务器和真正的浏览器(即Chromium或Firefox)时,一切正常
  • 恶灵/幻影JS报告状态0
  • capybara webkit
    还报告状态0
  • Selenium Webdriver(geckodriver)正确报告状态422
恶鬼(1.11.0)和幻影(2.1.1)的版本保持不变。在对Rails 5进行gem更新的过程中,Capybara从2.10.2升级到了2.12.0,但我也将旧的分支升级到了Capybara 2.12.0,没有任何中断,因此这可能也不是问题所在

我能够打开神奇的PhantomJS开发人员控制台,在“网络”面板中,看到状态代码也处于
test
模式,与预期的一样为422,这意味着问题一定是在JavaScript领域的某个地方

请注意,这不是一个跨源请求,请求不会中止(状态代码0的常见原因)。由于它在
开发
模式下工作,我有点困惑谁可能是这种行为的罪魁祸首


我还尝试查看回调函数的其他属性和参数,以及是否可以在其他属性中找到状态代码,但没有找到任何运气。

这听起来像是Qt中的一个bug,capybara webkit和phantomjs都依赖于旧版本的。你试过PhantomJS2.5.0测试版和最新的恶作剧吗?我还没有试过,但这是个好主意。让我困惑的是,为什么它能与Rails 4.1一起工作,而不能与Rails 5一起工作。@Mau li升级到Rails 4.2后,我遇到了这种情况。你找到原因/解决方法了吗?不幸的是,我没有找到。目前,我已经将这些规范标记为“待定”,直到我找到时间编译PhantomJS/Poltergeist的自定义版本,或者更仔细地研究这个问题。这听起来像是Qt中的一个bug,capybara webkit和PhantomJS都依赖于旧版本的。你试过PhantomJS2.5.0测试版和最新的恶作剧吗?我还没有试过,但这是个好主意。让我困惑的是,为什么它能与Rails 4.1一起工作,而不能与Rails 5一起工作。@Mau li升级到Rails 4.2后,我遇到了这种情况。你找到原因/解决方法了吗?不幸的是,我没有找到。目前,我已经将这些规范标记为“待定”,直到我找到时间编译一个PhantomJS/Poltergeist的自定义版本,或者更仔细地研究这个问题。