Ruby on rails Rspec+;水豚可以选择更改JS驱动程序
我对CI使用poltergeist/phantomjs,但我希望能够选择性地将JS驱动程序更改为selenium,以便在本地观看我的测试运行。理想情况下,我希望为这个默认的poltergeist设置一个命令行标志,但是能够运行rspec--driver=selenium(或类似的东西)Ruby on rails Rspec+;水豚可以选择更改JS驱动程序,ruby-on-rails,selenium,rspec,capybara,poltergeist,Ruby On Rails,Selenium,Rspec,Capybara,Poltergeist,我对CI使用poltergeist/phantomjs,但我希望能够选择性地将JS驱动程序更改为selenium,以便在本地观看我的测试运行。理想情况下,我希望为这个默认的poltergeist设置一个命令行标志,但是能够运行rspec--driver=selenium(或类似的东西) 有什么想法吗?最终没有找到答案,所以我想出了一个骇人的解决方案: 我发现唯一可以可靠改变的是标签系统。所以我调用using-tvisualtag,然后把它拿走 在spec/spec_helper.rb中 Rspe
有什么想法吗?最终没有找到答案,所以我想出了一个骇人的解决方案: 我发现唯一可以可靠改变的是标签系统。所以我调用using-tvisualtag,然后把它拿走 在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(要运行的测试)-t visual运行测试了
这样做的主要问题是它会阻止您运行特定的测试。您仍然可以使用rspec spec/features/signup_spec.rb-t visual
创建单个文件,但不能添加:54
以在特定行号上运行。您可以从可以在spec/spec\u 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
这将允许您指定特定的行号
您可能还必须根据正在使用的水豚驱动程序(即,使用数据库清理器)更改清理策略:
如果您想获得更多乐趣,可以将其与stackoverflow答案结合起来:要降低selenium在调试模式下运行规范时的运行速度,请执行以下操作:
config.before(:each) do |group|
set_speed :slow if DEBUG
end
我有一个我认为不那么老套的解决方案。我基本上是在剽窃杰夫·佩林的解决方案,但让它变得不那么复杂
我的DatabaseCleaner
只是设置为始终使用截断,因此无需有条件地配置该部分
按以下方式设置javascript\u驱动程序
:
# spec/spec_helper.rb
Capybara.javascript_driver = ENV['USE_SELENIUM_FOR_CAPYBARA'] ? :selenium : :webkit
如果我们总是显式地将javascript\u-driver
设置为某个值,我认为没有必要设置Capybara的默认驱动程序。(杰夫可能知道一些我不知道的事情。)
这将使用Webkit作为驱动程序,除非您的环境中设置了use\u SELENIUM\u FOR\u CAPYBARA
如果您希望RSpec能够与任何一个驱动程序一起工作,那么您的Gemfile中当然也应该同时包含Selenium和Webkit驱动程序gems。这个解决方案对我来说非常有效。我设置了一个环境变量并检查其值。将其添加到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上运行否,您实际上可以添加行号:54
来运行特定测试,至少在2015年和2016年,但我不记得在2014年是否也可以。
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