Я пытаюсь протестировать мультитенантное приложение PostgreSQL с Cucumber. Кажется, что соединение с базой данных сбрасывается на каждом шаге, поэтому необходимо установить schema_search_path
на каждом шаге. Я знаю о крючках и искал BeforeStep
, но там нет . В этом посте упоминается комбинация Before
и AfterStep
, но это тоже не работает, потому что schema_search_path
сбрасывается перед каждым шагом.
Как автоматически и DRYly переключить базу данных перед everystep, чтобы мой мир Cuke соответствовал сеансу Application?
Хотите увидеть подробности? Вот мои настройки сейчас (Примечание: я использую Квартира gem для переключения):
Before do
# ...
Apartment::Database.switch @current_site.subdomain if @current_site
# ...
end
AfterStep do
puts "start of AfterStep. current_database: #{Apartment::Database.current_database}"
# ...
Apartment::Database.switch @current_site.subdomain if @current_site
# ...
puts "end of AfterStep. current_database: #{Apartment::Database.current_database}"
end
Тогда у меня есть несколько шагов:
Given /^a site "([^"]*)" exists$/ do |site_name|
@current_site = Site.make! :name => site_name, :subdomain => site_name.downcase.underscore
Apartment::Database.switch @current_site.subdomain
end
When /^I upload an image to the image field$/ do
image_path = "#{Rails.root}/spec/fixtures/5x5.jpg"
puts "About to attach_file. that's controlled by selenium so the ApplicationController should switch for us."
attach_file "File", image_path
puts "current site: #{@current_site.subdomain}"
puts "In the schema #{Apartment::Database.current_database}"
sleep 2
puts "Here are all images in #{Apartment::Database.current_database}: #{Image.all.inspect}"
end
А вот как выглядит выход огурца для этого шага:
Given the site "Fancake" exists
# Other steps...
When I upload an image to the image field
About to attach_file. that's controlled by selenium so the ApplicationController should switch for us.
current site: fancake
In the schema "$user",public
Here are all images in "$user",public: []
start of AfterStep. current_database: "$user",public
end of AfterStep. current_database: fancake