1

我已经编写了我的基本模型并定义了它们的关联以及创建关联表的迁移。

编辑 - 强调我特别想测试的内容。

我希望能够测试:

  • 关联按预期配置
  • 表结构正确支持关联

我已经为我的所有模型编写了 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

用户工厂.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

组织规范.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 是同一工厂的不同实例。

我意识到这并没有遵循这些插件(FG,rspec)似乎适用的 BDD 想法,但是看到这是我的第一个 rails 应用程序,我不知道我已经配置了我的关联和表,我很不舒服继续前进结构合理。

4

1 回答 1

2

您的用户工厂已经通过 Factory Girlassociation方法创建了一个组织:

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 已经经过全面测试,一旦您确信框架确实完成了它应该做的事情,您就需要专注于测试应用程序的功能。

于 2010-04-25T04:10:55.880 回答