Poltergeist的page.status_code`的行为不直观

时间:2016-06-17 13:19:52

标签: ruby poltergeist

我们有一个功能:

@smoke @acceptance
Scenario: Home page is available
  When I visit the home page url
  Then I expect no error code

最后一行实现为:

Then(/^I expect no error code$/) do
  expect(page.status_code).to eq 200
end

这有时会失败。调试时,我们发现了以下内容:

  • 页面本身始终以200
  • 回复
  • 但是,页面中的一个资源有时会以204响应 (导致测试失败)

这表明page.status_code不等于所请求的实际URL的状态代码,但可以设置为页面请求的任何(或可能是最后?)资源的状态代码。

这是正确的解释,是page.status_code的预期行为吗?

注意:

  • 我意识到204可以被解释为成功,但这不是 本期重点

1 个答案:

答案 0 :(得分:0)

status_code返回触发phantomjs onLoadStarted回调的最后一个请求的结果 - 这应该是页面,或者可能是页面发起的ajax请求 - 它不应该是资源直接作为页面上的资源加载(img, javascripts,css等)。如果它是一个依赖资产,则phantomjs有一个问题,应该在该项目上报告可重复的示例。通过204响应报告什么类型的请求?如果它是一个ajax请求,那么它就像预期的那样 - 如果不是那么它就是phantomjs中的一个bug。注意:使用Capybara时检查响应代码确实是一种反模式,您通常应该坚持测试页面上的可见更改。