工厂女孩 - 创建相关记录

时间:2017-05-04 10:04:14

标签: ruby-on-rails ruby rspec factory-bot

我已尽力遵循本网站上的文档和类似问题而不感到高兴。我正在尝试创建一个有很多邀请的仪式:

ceremony.rb

class Ceremony < ApplicationRecord
  has_many :invites, dependent: :destroy
end

invite.rb

class Invite < ApplicationRecord
  belongs_to :ceremony
end

在我的规范中,我试图创建与仪式相关的邀请如下:

  let(:ceremony) { FactoryGirl.create(:ceremony) }
  let(:nom_1) { FactoryGirl.create(:nominee, award: award) }
  let(:inv_1) { FactoryGirl.create(:invite, email: nom_1.email, ceremony: ceremony) }
  let(:inv_2) { FactoryGirl.create(:invite, ceremony: ceremony) }
  let(:inv_3) { FactoryGirl.create(:invite, ceremony: ceremony) }
  before do
    User.delete_all
  end
  it 'should return invites not assigned a nominee' do
    binding.pry
    expect(award.available_nominees).to include(inv_2, inv_3)
  end

当测试遇到binding.pry并且我去探索时,我可以看到已经创建了一个新的仪式,以及3个带有该仪式ID的新邀请。当我打电话

ceremony.invites

我收到一个空的关系。当我打电话

Invite.where(ceremony: ceremony.id)

我收到[inv_1,inv_2,inv_3]。当我打电话

inv_1.ceremony

我再次收到仪式

ceremony.invites

返回一个空关系。我不知道为什么邀请是用正确的仪式ID创建的,但仪式显然没有邀请。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

在创建ceremony时,数据库中没有invites。由于Rails缓存数据库查询,invites数组将保持为空,除非:

  • 您手动添加邀请:ceremony.invites = [inv_1, ...]
  • 您在创建ceremony时(在工厂或致电工厂时)或
  • 添加邀请
  • 您重新加载ceremony或其invites关系。

我会选择第二个选项,并在调用期望之前添加ceremony.reloadceremony.invites(true)