Как я могу проверить, что мой дизайн таблицы правильно реализует мои ассоциации? - PullRequest
1 голос
/ 24 апреля 2010

Я написал свои базовые модели и определил их связи, а также миграции для создания связанных таблиц.

РЕДАКТИРОВАТЬ - Добавление акцента к тому, что я специально хочу проверить.

Я хочу иметь возможность проверить:

  • Связи настроены так, как задумано
  • Структуры таблиц должным образом поддерживают ассоциации

Я написал фабрики FG для всех моих моделей в ожидании получения полного набора тестовых данных, но я не могу понять, как написать спецификацию для тестирования ассоциаций own_to и has_many.

Например, для Организации, у которой есть_Пользователи, я хочу иметь возможность проверить, что в моем образце организации есть ссылка на моего примера пользователя.

Organization_Factory.rb:

Factory.define :boardofrec, :class => 'Organization' do |o|
  o.name 'Board of Recreation'
  o.address '115 Main Street'
  o.city 'Smallville'
  o.state 'New Jersey'
  o.zip '01929'
end

Factory.define :boardofrec_with_users, :parent => :boardofrec do |o|
  o.after_create do |org|
    org.users = [Factory.create(:johnny, :organization => org)]
  end
end

User_Factory.rb:

Factory.define :johnny, :class => 'User' do |u|
  u.name 'Johnny B. Badd'
  u.email 'jbadd@gmail.com'
  u.password 'password'
  u.org_admin true
  u.site_admin false
  u.association :organization, :factory => :boardofrec
end

Organization_spec.rb:

...
  it "should have the user Johnny B. Badd" do
    boardofrec_with_users = Factory.create(:boardofrec_with_users)
    boardofrec_with_users.users.should include(Factory.create(:johnny))
  end
...

Этот пример завершается ошибкой, поскольку список Organization.users и пользователь сравнения: johnny являются отдельными экземплярами одной и той же фабрики.

Я понимаю, что это не следует идеям BDD, стоящим за тем, для чего эти плагины (FG, rspec) казались предназначенными, но, учитывая, что это мое первое приложение для rails, мне неудобно двигаться вперед, не зная, что я настроил свои ассоциации и структуры таблиц правильно.

1 Ответ

2 голосов
/ 25 апреля 2010

Ваша фабрика пользователей уже создает организацию с помощью метода Factory Girl association:

it "should associate a user with an organization" do
  user = Factory.create(:johnny)
  user.organization.name.should == 'Board of Recreation'

  organization = user.organization
  organization.users.count.should == 1
end

Взгляните на 'log / test.log' после запуска вашей спецификации - вы должны увидеть ВСТАВКУ как для организации, так и для пользователя.

Если вы хотите проверить это без ассоциации Factory Girl, создайте фабрику, которая просто создает пользователя, и создайте ассоциацию в спецификации:

it "should associate a user with an organization" do
  user = Factory.create(:johnny_no_org)
  org = Factory.create(:boardofrec)
  org.users.should be_empty
  org.users << user
  org.users.should include(user)
end

Конечно, все, что это делает, это проверяет, выполняет ли ActiveRecord свою работу. Поскольку ActiveRecord уже прошел тщательное тестирование, вам нужно сконцентрироваться на тестировании функциональности вашего приложения, как только вы убедитесь, что фреймворк действительно выполняет то, что должен.

...