为什么在此测试设置中需要重新加载? Rails 4

时间:2016-06-01 14:20:24

标签: ruby-on-rails ruby-on-rails-4

以下是关联:

Class Tree
  has_many :apples
end

Class Apple
  belongs_to :tree
end

这是我的测试设置代码:

  let!(:apple) { create(:apple, tree: tree) }
  let(:tree) { create(:tree, :growing) }

为了tree.apples.first.apple_core不会出现cannot call .apple_core on nil之类的错误,我需要tree.reload。为什么是这样?在调用has_many之后内存树似乎应该在内存中加载let!关联吗?我阅读reload上的帖子,我仍然对发生的事情感到困惑?

1 个答案:

答案 0 :(得分:0)

我认为这是因为在apply Rspec 不要重新加载tree但只是使用其id,所以要让关系保持最新状态必须强行重新加载它,如果你使用 Factory girl ,只需在after create handler中执行:

 after(:create) do |item, evaluator|
    item.tree.reload
 end