Rspec + Capybara可选择更改JS驱动程序

时间:2013-08-29 02:53:25

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

我使用poltergeist / phantomjs作为CI,但我希望能够选择将JS驱动程序更改为selenium以观察我的本地测试运行。理想情况下,我想为这个默认的恶意攻击者设置一个命令行标志,但能够运行rspec --driver = selenium(或类似的东西)

有什么想法吗?

4 个答案:

答案 0 :(得分:0)

永远不会找到答案,所以这就是我提出的hacky解决方案:

我发现我唯一能够可靠改变的是标记系统。所以我打电话使用-t visual tag然后把它带走。

在spec / spec_helper.rb

Rspec.configure do |config|
  if config.filter_manager.inclusions[:visual]
    Capybara.javascript_driver = :selenium
    config.filter_manager.inclusions.delete(:visual)
  else
    Capybara.javascript_driver = :poltergeist
  end

~rest of rspec config code~

现在,您可以使用rspec (tests to run) -t visual运行测试 这个问题的主要问题是它会阻止你运行特定的测试。您仍然可以使用rspec spec/features/signup_spec.rb -t visual执行单个文件,但无法添加:54以在特定的行号运行。

答案 1 :(得分:0)

您可以从命令行设置一个可在spec / spec_helper.rb中使用的环境变量:

DEBUG = ENV['DEBUG'] || false
if DEBUG
  Capybara.default_driver = :selenium
else
  Capybara.default_driver = :rack_test
  Capybara.javascript_driver = :poltergeist
end

然后可以从命令行运行,如下所示:

DEBUG=true rspec spec/features/my_spec.rb:35

这将允许您指定特定的行号。

您可能还需要根据所使用的水豚驱动程序(即使用数据库清理程序)更改清理策略:

RSpec.configure do |config|
  config.before(:suite) do
    if DEBUG
      DatabaseCleaner.strategy = :truncation
    else
      DatabaseCleaner.strategy = :transaction
    end

    DatabaseCleaner.clean_with(:truncation)
  end
end

如果你想获得幻想,你可以将它与这个stackoverflow答案结合起来https://stackoverflow.com/a/5150855/95683,以减慢selenium在DEBUG模式下运行时运行规范的速度:

config.before(:each) do |group|
  set_speed :slow if DEBUG
end

答案 2 :(得分:0)

我认为可能是一个不太讨厌的解决方案。我基本上是在扯掉Jeff Perrin的解决方案,但却不那么复杂。

我的DatabaseCleaner设置为始终使用截断,因此无需有条件地配置该部分。

以这种方式设置javascript_driver

# spec/spec_helper.rb

Capybara.javascript_driver = ENV['USE_SELENIUM_FOR_CAPYBARA'] ? :selenium : :webkit

如果我们总是明确地设置javascript_driver,我认为没有必要设置Capybara的默认驱动程序。 (Jeff可能知道我不知道的事情。)

除非您在环境中设置了USE_SELENIUM_FOR_CAPYBARA,否则这将使用Webkit作为驱动程序。

如果您希望RSpec能够与任一驱动程序一起运行,您当然也应该在Gemfile中同时拥有Selenium和Webkit驱动程序。

答案 3 :(得分:0)

这个解决方案对我来说非常有用。我设置了一个环境变量并检查它的值。将其添加到spec_helper.rb文件

if ENV['DRIVER'] =='poltergeist' //use any driver you want to run on circlci
  Capybara.default_driver = :poltergeist
  URL = // use your own end point like http://www.localhost:8080
else
   Capybara.default_driver = :selenium
   URL = // Use your end point
end 
Capybara.configure do |config|
  config.app_host = URL
end

然后在控制台上运行此命令

DRIVER = poltergeist rspec //用于在poltergeist上运行测试

rspec //用于在selenium上运行