1. ホーム
  2. ruby-on-rails

[解決済み] Rails 4: テスト用データベースをリセットする方法は?

2023-01-02 06:43:32

質問

Rails 4を使用していますが、テストのリファクタリングでbeforeフィルターを使用しているため、RSpecのテストの一部が失敗していることに気づきました(おそらくトランザクションが原因)。この投稿では、同様の問題について説明しています。

rails test database not clearing after some runs

DatabaseCleaner gemを使う代わりに、テストデータベースをクリアするrakeコマンドはないのでしょうか? 私は rake db:test:prepare はRails 4で非推奨になりました。また、もし以下のようなトランザクションの前に

`post :create, user: Fabricate.attributes_for(:user)`

が永続的である場合、テストデータベースを手動で消去する必要性を避けるために、リファクタリングの代替方法はありますか?

どのように解決するのですか?

やりすぎな解決方法としては

bundle exec rake db:drop RAILS_ENV=test
bundle exec rake db:create RAILS_ENV=test
bundle exec rake db:schema:load RAILS_ENV=test

これを全部rakeのタスクにして実行すればいい。

もう一つの解決策は はこちら は、以下のようにあなたの spec_helper.rb ファイル

config.after :all do
  ActiveRecord::Base.subclasses.each(&:delete_all)
end

免責事項: 私はこれをテストしていませんし、あなたが読むべきは SOポスト をお読みください。

とはいえ、このような状況を避けるために、データベースクリーナーgemを使用することをお勧めします。