Ruby on Rails 2.3.8 プロジェクトがあり、データはほぼ完全に読み取り専用です。ステージング データベース (本番データベースのコピー) を使用する受け入れテストを作成したいと考えています。
そのため、機能やシナリオの前後でトランザクションやデータベース テーブルの切り捨てを使用したくありません。
出来ますか?
Ruby on Rails 2.3.8 プロジェクトがあり、データはほぼ完全に読み取り専用です。ステージング データベース (本番データベースのコピー) を使用する受け入れテストを作成したいと考えています。
そのため、機能やシナリオの前後でトランザクションやデータベース テーブルの切り捨てを使用したくありません。
出来ますか?
私の解決策は、features/support/env.rb で DatabaseCleaner をトランザクション クリーニング戦略に切り替えることでした。
if defined?(ActiveRecord::Base)
begin
require 'database_cleaner'
DatabaseCleaner.strategy = :transaction
rescue LoadError => ignore_if_database_cleaner_not_present
end
end
そして、features/support/database_cleaner_patch.rb を追加して DatabaseCleaner にモンキー パッチを適用します。
module DatabaseCleaner::ActiveRecord
#for now we will disable transactions
class Transaction
def start
end
def clean
end
end
end
プロジェクトには 3 つのデータベースがあり、クロスデータベース クエリを使用しているため、トランザクションを使用できません。それ以外の場合は、DatabaseCleaner にモンキー パッチを適用しません。