繁体   English   中英

具有关联的factory_girl工厂未正确分配ID

[英]factory_girl factories with associations not assigning IDs correctly

我有3个这样关联的模型:

#user.rb
has_many :forums
has_many :posts

#forum.rb
belongs_to :user
has_many :posts

#post.rb
belongs_to :user
belongs_to :forum

我正在尝试创建一组工厂,这些工厂都共享彼此关联所需的所需ID。

#User factory
FactoryGirl.define do
  factory :user do
    sequence :email do |n|
      "testuser#{n}@postfactory.com"
    end

    password "password#1"
  end
end

#Forum factory
FactoryGirl.define do
  factory :forum do
    user
    name "Forum Name"
    description "Forum Description with a minimum character count of 20"
  end
end

#Post factory
FactoryGirl.define do
  factory :post do
    user
    forum
    title 'Post 1'
    description 'This is a test description for Post 1'
  end
end

当我使用以下命令运行规格测试时:

user =      FactoryGirl.create(:user)
forum =     FactoryGirl.create(:forum)
post =      FactoryGirl.create(:post)

它在控制台中输出以下内容:

#<User id: 1, email: "testuser1@userfactory.com", created_at: "2016-10-27 20:10:36", updated_at: "2016-10-27 20:10:36">

#<Forum id: 1, name: "Forum Name", description: "Forum Description with a minimum character count o...", user_id: 2, created_at: "2016-10-27 20:10:36", updated_at: "2016-10-27 20:10:36">

#<Post id: 1, title: "Post 1", description: "This is a test description for Post 1", user_id: 3, forum_id: 2, created_at: "2016-10-27 20:10:36", updated_at: "2016-10-27 20:10:36">

正如您所看到的, user_id随创建的每个工厂以及forum_id 我希望这些对象都具有1的ID,而无需执行一些手动工作。 我的设定做错了什么

编辑:我有点看我做错了。 我只需要在规格测试中生成一个post ,它将生成创建该post所需的工厂(论坛和用户)。 但是,我确实注意到我正在生成两个用户。

(byebug) User.count
2
(byebug) User.first
#<User id: 1, email: "testuser1@postfactory.com", created_at: "2016-10-27 20:30:33", updated_at: "2016-10-27 20:30:33">
(byebug) User.last
#<User id: 2, email: "testuser2@postfactory.com", created_at: "2016-10-27 20:30:33", updated_at: "2016-10-27 20:30:33">

知道为什么吗? 我尝试删除sequence :email部分并按标准进行操作。 但是,我收到一个验证错误,表明该电子邮件已经被接收。 由于某种原因,即使我在规格测试中只调用一次,它也会尝试两次运行user工厂。

每次调用FactoryGirl.create ,都会创建一个新用户,因此在运行此代码后:

user  = FactoryGirl.create(:user)
forum = FactoryGirl.create(:forum)
post  = FactoryGirl.create(:post)

实际上,您创建了3个用户,如您所见,post具有user_id: 3

如果要创建论坛并与创建的用户一起发布,则可以在创建用户时将该用户分配给论坛并发布:

user  = FactoryGirl.create(:user)
forum = FactoryGirl.create(:forum, user: user)
post  = FactoryGirl.create(:post, user: user, forum: forum)

使用此代码,只有一个创建的用户。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM