Помещение данных домена в модель с использованием find_or_create_by
вызвало у меня некоторые проблемы во время тестов. Я полагаю, что проблема заключается в том, что данные были вставлены, а константа определена во время транзакции БД теста. После тестового примера транзакция db откатывается, оставляя все еще инстанцированную константу, указывающую на запись, которая больше не существует.
Итак, я поместил данные домена в seeds.rb
. Чтобы предотвратить проблему, отмеченную в Docunext, для модели, созданной до того, как данные занесены в базу данных, я использую необработанный SQL для вставок, например:
# in db/seeds.rb
ActiveRecord::Base.connection.execute "INSERT INTO invoice_statuses(name) values ('Approved'), ('Sent'), ('Paid');"
И я сконфигурировал гем database_cleaner, чтобы пропустить все таблицы доменов при очистке базы данных между тестами:
# in spec/support/database_cleaner.rb
RSpec.configure do |config|
domain_data = %w[aql_results invoice_statuses service_results remark_types]
config.before(:suite) do
DatabaseCleaner.strategy = :deletion, { except: domain_data }
DatabaseCleaner.clean
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each, :js => true) do
DatabaseCleaner.strategy = :deletion, { except: domain_data }
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end