Автоматическое переключение схем PostgreSQL перед каждым шагом в Cucumber - «BeforeStep»? - PullRequest
1 голос
/ 27 ноября 2011

Я пытаюсь протестировать мультитенантное приложение 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

1 Ответ

1 голос
/ 27 ноября 2011

Как ваше приложение переключает схемы? Ваши шаги Cucumber должны делать то же самое (вероятно, через пользовательский интерфейс приложения).

А зачем заморачиваться со схемами? Многопользовательское приложение должно обычно хранить все данные в одной схеме: легче разбить данные, если они хранятся вместе, чем склеивать данные, если они хранятся отдельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...