我写了我的基本模型,并定义了它们的关联以及迁移来创建关联的表。我如何测试我的桌子设计是否正确地实现了我的关联?
编辑 - 增加我特别想测试的重点。
我希望能够测试:
- 的关联被配置为目的
- 表结构支持协会的正确
我已经为我的所有车型编写FG工厂,以期望拥有一套完整的测试数据但我无法掌握如何编写一个spec来测试belongs_to和has_many关联。
例如,给定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 '[email protected]'
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是同一工厂的单独实例。
我意识到这并没有遵循这些插件(FG,rspec)背后的BDD想法,但看到这是我的第一个rails应用程序,我不自然地前进而不知道我已经配置我的关联和表格结构正确。
我改变了标题,并加强了我正在寻求解决的问题。我意识到没有必要测试ActiveRecord本身,但我正在测试是否**我已**正确地实现了我的关联,并使用适当的表格设计正确地支持了它们。 – 2010-04-25 17:47:32
够公平的。参考我的第二个例子,我认为足够的关联测试应该是'org.users.should include(user)'('has_many'方面)和'user.organization.should == org'('belongs_to'方面 – zetetic 2010-04-25 20:00:31
太好了,谢谢你,试试看。 – 2010-04-25 22:40:20