Rails4.1でDatabaseCleanerを使う
目的
Rails4.1で、CapybaraとPoltergeistを使って、integrationテストを書こうとしていたんだけど… Railsのテストはtransactionでエレガントに管理しており、テストが終わったら綺麗サッパリになるようにしてあるので、 別プロセスのpotergeistからアクセスした際にはデータがなかったりして、不便であった。 そこで、DatabaseCleanerで削除タイミングをコントロールして、うまいことやろうと思った次第。
変更箇所
Gemfileとtest/test_helper.rbの二箇所。
# Gemfile (省略) group :development, :test do gem 'database_cleaner' # テスト時にdbのクリーンアップする方法を選択しやすくする end (省略)
# test/test_helper.rb require 'database_cleaner' (省略) class ActionDispatch::IntegrationTest (省略) self.use_transactional_fixtures = false (省略) before do DatabaseCleaner.strategy = :truncation DatabaseCleaner.start end after do DatabaseCleaner.clean end end
つまづいたところ
test/test_helper.rbのself.use_transactional_fixtures = false!! ここを書かないと、エレガントなトランザクションのテストデータの管理をやめられない。
これからやりたいところ
わかっていたけど、テストが遅くなった気がする。 なので、rackのテストで済むところは、今までどおりトランザクション管理に戻したい。











