ruby-on-rails - 工厂女孩 : Automatically assigning parent objects

标签 ruby-on-rails ruby unit-testing factory-bot

我刚刚进入 Factory Girl,我遇到了一个困难,我相信应该容易得多。我只是无法将文档扭曲成一个工作示例。

假设我有以下模型:

class League < ActiveRecord::Base
   has_many :teams
end

class Team < ActiveRecord::Base
   belongs_to :league
   has_many :players
end

class Player < ActiveRecord::Base
   belongs_to :team
end

我想做的是:

team = Factory.build(:team_with_players)

并让它为我培养了一批玩家。我试过这个:

Factory.define :team_with_players, :class => :team do |t|
   t.sequence {|n| "team-#{n}" }
   t.players {|p| 
       25.times {Factory.build(:player, :team => t)}
   }
end

但这在 :team=>t 部分失败了,因为 t 并不是真正的 Team,它是一个 工厂::代理:: builder 。我必须将一个团队分配给一个玩家。

在某些情况下,我想建立一个 League 并让它做类似的事情,创建由多个玩家组成的多个团队。

我错过了什么?

最佳答案

Factory.define :team do |team|
  team.sequence(:caption) {|n| "Team #{n}" }
end

Factory.define :player do |player|
  player.sequence(:name) {|n| "John Doe #{n}" }
  player.team = nil
end

Factory.define :team_with_players, :parent => :team do |team|
  team.after_create { |t| 25.times { Factory.build(:player, :team => t) } }
end

关于ruby-on-rails - 工厂女孩 : Automatically assigning parent objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2366316/

相关文章:

ruby-on-rails - Ruby .reject after .split 行为异常

ruby-on-rails - 无法在任何来源中找到 i18n-0.6.0 (Bundler::GemNotFound)

java - 单元测试图形

ruby-on-rails - Assets 管道中不存在 Assets "logo.png"

ruby-on-rails - Rails 选择值到属性中

ruby-on-rails - 在 Rails 3 中查找 session ID

ruby - Array#uniq() 忽略相同的 hash() 值?

python - py.test 每个装置进行多个测试

unit-testing - 使用Mocha、Chai和Sinon来测试延迟 Action

mysql - 如何通过在 rails 中递增来保存唯一的字符串?