我编写了基本模型并定义了它们的关联以及创建关联表的迁移。
编辑 - 强调我特别想要测试的内容。
我希望能够测试:
我为所有模型编写了FG工厂,期望拥有一套完整的测试数据,但我无法掌握如何编写规范以测试belongs_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列表和比较User:johnny是同一Factory的单独实例。
我意识到这并不遵循这些插件(FG,rspec)背后的BDD想法,但看到这是我的第一个rails应用程序我不舒服地向前推进而不知道我已经配置了我的关联和表结构正确。
答案 0 :(得分:2)
您的用户工厂已根据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” - 您应该看到组织和用户都有INSERT。
如果您想在没有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已经过全面测试,一旦你确信自己的框架实际上已经完成了它应该做的事情,你就会专注于测试应用程序的功能。