Capybara webkit无效响应错误,如何调试?

时间:2012-08-01 10:15:04

标签: ruby-on-rails ruby-on-rails-3 rspec capybara capybara-webkit

我正在尝试为网页编写请求规范。

此页面可在开发过程中正常运行。

但是在capybara webkit中运行后,在尝试提交表单后出现此错误:

 Failure/Error: Unable to find matching line from backtrace
 Capybara::Driver::Webkit::WebkitInvalidResponseError:
   Unable to load URL: https://127.0.0.1:33416/sign_in

为了找出原因,我开始在页面上剥离标记和JavaScript。到具有普通提交按钮的空表单的程度。我仍然得到上述错误!

现在测试结果如下:

it "should be able create a new foo", :js, :focus do
  visit new_foo_path
  find('#submit').click
end

如果我删除:js选项:

,此测试确实有效
it "should be able create a new foo", :focus do
  visit new_foo_path
  find('#submit').click
end

Javascript测试在此应用程序的其他页面中有效...

这对我没有意义。有没有人有任何建议如何从这里调试?

感谢您的帮助

4 个答案:

答案 0 :(得分:19)

将以下内容添加到capybara配置中。

require 'rack/utils'
Capybara.app = Rack::ShowExceptions.new(NameOfYourRailsApp::Application)

当你收到错误时,你会在stdout上看到它,机架将呈现一个页面,其中包含有关环境(cookie等)和回溯的详细信息。

答案 1 :(得分:7)

您看到的错误很可能是capybara-webkit的神秘方式,告诉您页面中存在某种异常。我有一段时间the same problem,“无法加载网址”的事情完全让我失望,很难找到实际问题。

作为一些尝试,我建议:

  • 确保安装了最新版本的capybara-webkit。
  • 检查除实际表格以外的测试元素,例如控制器逻辑和涉及的任何模型。把所有东西都拿出去,直到你什么都没有。
  • 查看有关此问题的discussion,并从那里关注潜在客户。我很确定这是同一个问题或相关问题。
祝你好运!

答案 2 :(得分:2)

我正在使用子域名,我可以将其添加到spec_helper.rb

Capybara.configure do |config|
  config.javascript_driver = :webkit
  config.server_port = 3000
  config.app_host = "http://subdomain.local.host:3000"
end

显然在127.0.0.1 subdomain.local.host之前添加到我的/etc/hosts文件

答案 3 :(得分:2)

我遇到了类似的问题,并且能够通过page.driver.browser.ignore_ssl_errors启用:js启用的测试来解决此问题。以下代码对我有用:

config.before(:each) do
    if Capybara.current_driver == :webkit
      # Need to manually specify ignoring of SSL errors
      page.driver.browser.ignore_ssl_errors
    end
end