[英]Rspec+Capybara optionally change JS driver
我使用poltergeist / phantomjs作為CI,但我希望能夠選擇將JS驅動程序更改為selenium以觀察我的本地測試運行。 理想情況下,我想為這個默認的惡意攻擊者設置一個命令行標志,但是能夠運行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上運行
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.