CI に poltergeist/phantomjs を使用していますが、必要に応じて JS ドライバーを selenium に変更して、テストをローカルで実行できるようにしたいと考えています。理想的には、このデフォルトのポルターガイストのコマンド ライン フラグが必要ですが、rspec --driver=selenium (または同様のもの) を実行できるようにする必要があります。
何か案は?
CI に poltergeist/phantomjs を使用していますが、必要に応じて JS ドライバーを selenium に変更して、テストをローカルで実行できるようにしたいと考えています。理想的には、このデフォルトのポルターガイストのコマンド ライン フラグが必要ですが、rspec --driver=selenium (または同様のもの) を実行できるようにする必要があります。
何か案は?
ハックの少ないソリューションと思われるものがあります。私は基本的に Jeff Perrin のソリューションをはぎ取っていますが、複雑さを軽減しています。
MyDatabaseCleaner
は常に切り捨てを使用するように設定されているだけなので、その部分を条件付きで構成する必要はありません。
このように設定しますjavascript_driver
:
# spec/spec_helper.rb
Capybara.javascript_driver = ENV['USE_SELENIUM_FOR_CAPYBARA'] ? :selenium : :webkit
javascript_driver
常に明示的に何かを設定している場合、Capybara のデフォルト ドライバーを設定する必要はないと思います。(ジェフは私が知らない何かを知っている可能性があります。)
これは、環境で設定していない限り、ドライバーとして Webkit を使用USE_SELENIUM_FOR_CAPYBARA
します。
もちろん、RSpec をいずれかのドライバーで機能させたい場合は、Gemfile に Selenium と Webkit の両方のドライバー gem を含める必要があります。
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
凝りたい場合は、このスタックオーバーフローの回答と組み合わせることができます: https://stackoverflow.com/a/5150855/95683デバッグモードで実行されているときにセレンがスペックを実行する速度を遅くします:
config.before(:each) do |group|
set_speed :slow if DEBUG
end
このソリューションは私にとって完璧に機能しました。環境変数を設定し、その値を確認します。これを 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 //ポルターガイストでテストを実行するため
rspec //セレンで実行する場合
これに対する答えが見つからなかったので、私が思いついたハッキーな解決策を次に示します。
確実に変更できることがわかったのは、タグ付けシステムだけでした。だから私は -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
に a を追加することはできません。:54