5

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

有任何想法吗?

4

4 回答 4

0

我有我认为可能是一个不那么老套的解决方案。我基本上是在抄袭 Jeff Perrin 的解决方案,但让它变得不那么复杂。

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

设置你的javascript_driver这种方式:

# spec/spec_helper.rb

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

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

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

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

于 2014-07-25T13:59:14.200 回答
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
于 2014-02-11T16:47:33.380 回答
0

从来没有最终找到答案,所以这是我想出的 hacky 解决方案:

我发现唯一可以可靠更改的是标记系统。所以我调用 using -t 视觉标签然后把它拿走。

在 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在特定行号处运行。

于 2013-12-17T15:46:50.923 回答
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 上运行

于 2015-11-13T01:01:23.940 回答