今のプロジェクトでは cucumber を使ったりしているので、cucumber-rails についてだいぶ一生懸命調べてみた。もちろん webrat ではなく capybara を使う前提。
cucumber で @javascript タグを付けると Capybara.javascript_driver に設定した値がそのシナリオに限って Capybara.current_driver と設定されて動く。つーか、Capybara.javascript_driver はここと capybara/rspec の :js => true でしか意味が無いものだった。な、なんだってー。
Capybara.javascript_driver は特に変更しない限り :selenium となる
cucumber-rails ではデフォルトで DatabaseCleaner の hook が入っていて、特に指定しない場合は DatabaseCleaner.strategy に設定した値が使われる。
んが、@javascript (@selenium, @culerity とか)を使う場合は何故か
DatabaseCleaner.strategy = :truncation
と決め打ちの値が使われていまい、マスタ系のデータも含めて全部吹き飛ばしてしまう。これだとだいぶ困ってしまう場合があるので、そういう場合は features/support/env.rb とかに下のように設定する。
Before('@javascript') do DatabaseCleaner.strategy = :truncation, {except: %w[users]} end
requests spec と違ってはまった部分は上の二つくらいかなあ。cucumber 本体はまだ調べてないけど、cucumber-rails は大体わかった。