如何在硒和水豚的子目录中正确测试乘客铁路应用程序?

时间:2014-02-07 14:53:05

标签: ruby-on-rails selenium rspec capybara passenger

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

手动测试时工作正常,但我无法让Capybara和Selenium放好。 在spec_helper.rb中,如果我将应用主机设置为:

config.app_host   = 'http://rails4.test/tools'

我的Selenium测试运行正常(即带有“js:true”的测试)但是我收到了不依赖Selenium的路由错误。例如,如果我有测试代码说:

visit login_path

我会收到以下错误:

  

没有路线匹配[GET]“/ tools / login”

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

config.app_host   = 'http://rails4.test'

我遇到了相反的问题 - 非硒测试工作正常,但Selenium测试访问了错误的网址(http://rails4.test/controller/action而不是http://rails4.test/tools/controller/action),从而产生404错误。我假设非硒测试工作正常,因为乘客配置正确地路由请求?

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

config.action_controller.relative_url_root = '/new_tools'

但无论如何设置config.app_host,它都没有改变任何内容。

有没有办法单独设置Selenium主机?我做了些蠢事吗?

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

1 个答案:

答案 0 :(得分:0)

通过检测在每次测试之前是否设置了:js => true选项并相应地调整app_host来解决问题:

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

# 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