2

私がsqliteを使用していたとき、この設定はうまくいきました:

  config.before(:suite) do
    DatabaseCleaner.strategy = :truncation
  end
  config.before(:each) do
    controller.stub(:should_navigate_user?).and_return(false) rescue ""
    DatabaseCleaner.start
  end
  config.after(:each) do
    DatabaseCleaner.clean
  end

PostgreSQL に切り替えたとき、テストがデータベース内のエントリの ID 数に依存しているときにエラーが発生し始めました。テスト中にデータベースを調べましたが、データベースがクリーンアップされることはありませんでした。

次の構成に切り替えると:

  config.before(:suite) do
    DatabaseCleaner.strategy = :truncation
  end
  config.before(:each) do
    DatabaseCleaner.clean
    controller.stub(:should_navigate_user?).and_return(false) rescue ""
    DatabaseCleaner.start
  end
  config.after(:each) do
    DatabaseCleaner.clean
  end

すべてのテストに合格しましたが、メソッド テストの前後clean を呼び出さなければなりませんか?

各テストの前後にデータベースをクリーンアップする必要はありません。どこかで何かを誤解しているような気がします。私は何を理解できていません。

4

2 に答える 2

3

データベースクリーナーでpostgresを使用しています。今はうまくいっていますが、最初は苦労したことを覚えています。以下に設定を貼り付けました。これを spec_helper.rb または /support/database_cleaner.rb などの別のファイルに貼り付けることができます

RSpec.configure do |config|

  config.before(:suite) do
    DatabaseCleaner.clean_with(:truncation)
  end

  config.before(:each) do
    DatabaseCleaner.strategy = :transaction
  end

  config.before(:each, :js => true) do
    DatabaseCleaner.strategy = :truncation
  end

  config.before(:each) do
    DatabaseCleaner.start
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end

end

また、spec_helper でトランザクション フィクスチャをオフにしてください。

config.use_transactional_fixtures = false
于 2013-08-15T04:30:25.897 に答える
1

非永続モードで sqlite を使用しました。PostgreSQL にはそのようなオプションはなく、常に永続的です。データベースのドロップ/データベースの作成を使用して、完全にクリーンアップします。

于 2013-07-18T14:33:22.820 に答える