2014年2月3日

Ruby on Rails 4.0 で Turnip 上のcapybara を使ったテストでトランザクション処理が上手くいっていない問題が解決

Railsで TDDが開始できる環境を整えたと思って、実際に作業を始めると、テストの実行を繰り返すと、データベースにテストデータが残る問題が発生しました。

同じテストは、何回実施しても、同じ結果になって欲しいのですが、2回目以降のテストは、データベースに前のテストのデータが残ってエラーとなってしまいました。

そこで、検索して解決策を探したら、解決策が記載されているページを発見しました。

原因は、 capybara経由でnewしたものと、FactoryGirlでnewしたものが、連携をとれてないので、不整合が起こっていたのでした。

解決策は、
RSpec.configure do |config|
  config.use_transactional_fixtures = false
end
として、
database_cleanerというgemを導入する事でした。

database_cleanerの設定も含め、以下の記述をspec_helper.rbに追加して解決しました。
RSpec.configure do |config|
  config.use_transactional_fixtures = false
 
  config.before(:suite) do
    DatabaseCleaner.strategy = :truncation
  end
  config.before(:each) do
    DatabaseCleaner.start
  end
  config.after(:each) do
    DatabaseCleaner.clean
  end
end