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

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

有任何想法吗?

从来没有找到答案,所以这是我提出的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 (tests to run) -t visual
这个问题的主要问题是它会阻止你运行特定的测试。 您仍然可以使用rspec spec/features/signup_spec.rb -t visual执行单个文件,但无法添加:54以在特定行号处运行。

您可以从命令行设置可在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 

我认为可能是一个不太讨厌的解决方案。 我基本上剥夺了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驱动程序。

这个解决方案对我来说非常有用。 我设置了一个环境变量并检查它的值。 将其添加到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上运行