使用has_many通过关联构建记录,没有数据库

时间:2018-04-11 20:42:28

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

在测试给定预加载关系时不查询db的方法的上下文中,我想构建一个带有预加载关联的记录。当我试图通过关系构建一个has_many的记录时,我遇到了麻烦。这不起作用:

let(:preloaded_record) { build(:test_record,
  hmtas: build_list(:has_many_through_association, N)
) }

通过将数据持久化到数据库来构建关系,然后在数据库中查询此数据以测试方法是否未达到数据库似乎不是最佳。

如何在不使用db的情况下通过关联预加载has_many来创建记录?

所需:实际记录或近似模拟,具有.association(:hmtas)。loading?

可选:使用factory_bot

How to use build method with a has_many :through association

相关

1 个答案:

答案 0 :(得分:3)

答案是你没有。 ActiveRecord关联只是一个关系数据库之上的抽象,没有它就没有意义 - 关联是由外键关系定义的。

这就是为什么协会真的没有规定存根。

你可以stub getter方法返回一个对象数组:

allow(parent).to receive(:children)
                  .and_return(build_list(:children, 10))

但是你需要减轻敏锐度的损失,以防止可能是非常微不足道的性能提升。