使用url参数时,在没有机架的情况下运行Capybara会产生错误

时间:2013-07-16 01:32:37

标签: ruby rspec capybara

根据此建议,这是我的设置:How to get Cucumber/Capybara/Mechanize to work against external non-rails site

直到我向URL添加参数才有效。有关解决这个问题的任何建议吗?

require 'rspec'
require 'capybara/rspec'
require 'capybara/dsl'

@test_url = "test"

RSpec.configure do |config|
  config.include Capybara::DSL
end

Capybara.configure do |config|
  config.run_server = false
  config.current_driver = :selenium
  config.app = "fake app name"
  config.app_host = "http://site.com/#{@test_url}"
end

这很好用:

describe "the page, without URL parameters" do
  it "shows the regular form" do
    visit "/registration.aspx"
    page.should have_content "YES"    
  end
end

但是这个:

describe "the page, when not fully pre-filled" do
  it "shows the regular form if only passed the attendance" do
    visit "/registration.aspx?r=y"
    page.should have_content "YES"    
  end

  it "shows the regular form if only passed the attendance" do
    visit "/registration.aspx?f=Jim"
    page.should have_content "YES"    
  end

end

结果

....FF

Failures:

  1) the page, when not fully pre-filled shows the regular form if only passed the attendance
     Failure/Error: visit "/registration.aspx?r=y"
     NoMethodError:
       undefined method `call' for "fake app name":String
     # ./conf_spec.rb:39:in `block (2 levels) in <top (required)>'

  2) the page, when not fully pre-filled shows the regular form if only passed the attendance
     Failure/Error: visit "/registration.aspx?f=Jim"
     NoMethodError:
       undefined method `call' for "fake app name":String
     # ./conf_spec.rb:44:in `block (2 levels) in <top (required)>'

3 个答案:

答案 0 :(得分:16)

您只能设置appapp_host中的一个。因此,您应该从配置中删除config.app

另外,您应该设置default_driver而不是current_driver

正如我在链接问题的答案中所示,工作配置是:

Capybara.configure do |config|
  config.run_server = false
  config.default_driver = :selenium
  config.app_host = 'https://www.google.com' # change url
end

答案 1 :(得分:4)

如果您指定app_host而不是使用rack,则需要指定 default_driver 而不是 current_driver 。例如:

Capybara.run_server = false
Capybara.default_driver = :selenium
Capybara.app_host = 'https://www.google.com'

instead of

Capybara.run_server = false
Capybara.current_driver = :selenium
Capybara.app_host = 'https://www.google.com'

答案 2 :(得分:0)

假设您有一个非Rack应用程序,并且正在按照引用https://groups.google.com/forum/#!msg/ruby-capybara/9UFnfrc1S-s/TfQO5uBv7gMJ的第二个答案中的说明进行操作,那么在我看来,黑客/解决方法仅对最简单的用例有效,即当您'我没有尝试将参数传递给应用程序。我假设Rack或Capybara试图调用您的应用程序来传递参数,但它失败了,因为您的app只是String而不是call能够对象。