簡體   English   中英

Rspec + Capybara可選擇更改JS驅動程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM