Ruby on rails 如何使用selenium和capybara在子目录中正确测试客运铁路应用程序?

Ruby on rails 如何使用selenium和capybara在子目录中正确测试客运铁路应用程序?,ruby-on-rails,selenium,rspec,capybara,passenger,Ruby On Rails,Selenium,Rspec,Capybara,Passenger,我在一个子目录中运行了一个乘客Rails 4应用程序:rails4.test/tools/(rails4.test/提供不相关的内容) 手动测试时效果很好,但我很难将水豚和硒放在合适的位置。 在spec\u helper.rb中,如果我将应用程序主机设置为: config.app_host = 'http://rails4.test/tools' config.app_host = 'http://rails4.test' 我的Selenium测试运行良好(即带有“js:true”的

我在一个子目录中运行了一个乘客Rails 4应用程序:
rails4.test/tools/
(rails4.test/提供不相关的内容)

手动测试时效果很好,但我很难将水豚和硒放在合适的位置。 在
spec\u helper.rb
中,如果我将应用程序主机设置为:

config.app_host   = 'http://rails4.test/tools'
config.app_host   = 'http://rails4.test'
我的Selenium测试运行良好(即带有“js:true”的测试),但是对于不依赖Selenium的测试,我会收到路由错误。例如,如果我有这样的测试代码:

visit login_path
我将得到以下错误:

没有与[GET]“/tools/login”匹配的路由

但是,如果我将应用程序主机设置为:

config.app_host   = 'http://rails4.test/tools'
config.app_host   = 'http://rails4.test'
我遇到了相反的问题-非硒测试工作正常,但是硒测试访问了错误的url(而不是),因此产生了404个错误。我假设非selenium测试工作正常,因为乘客配置正确地路由了请求

我想有一个简单的方法来解决这个问题吗?我还尝试将以下行添加到我的
test.rb
文件中:

config.action_controller.relative_url_root = '/new_tools'
但无论config.app_主机是如何设置的,它都没有改变任何东西

有没有办法单独设置Selenium主机?我在做傻事吗


如有任何建议,将不胜感激!谢谢。

通过在每次测试之前检测是否设置了
:js=>true
选项并相应调整
应用程序主机
解决了问题:

RSpec.configure do | config |
块的
spec_helper.rb
中:

# adjust app_host depending of if if js == true
config.before(:each) do
  if(example.options[:js])
    Capybara.app_host   = 'http://rails4.test/tools'
  else
    Capybara.app_host   = 'http://rails4.test'
  end
end

我很好奇:你是使用RC还是WebDriver?RC有一个有趣的概念,您有一个基本URL,然后当您调用
open()
,它将打开相对于该基本URL的位置。例如,
open('/test')
实际上将打开
baseurl.com/test
而不是
http:///test
有趣的是,我正在使用WebDriver,它似乎有更好的支持。我想我可以尝试RC gem(),但实际上我并没有调用make a to
open()
,水豚是通过
visit
实现的。也许它会起作用?不,不,不要降级到RC。结果我不能,即使我想: