在测试给定预加载关系时不查询数据库的方法的上下文中,我想用预加载关联构建记录。我在尝试通过关系建立具有 has_many 的记录时遇到了麻烦。这不起作用:
let(:preloaded_record) { build(:test_record,
hmtas: build_list(:has_many_through_association, N)
) }
通过将数据持久化到数据库来构建关系,然后查询数据库以获取此数据以测试方法是否未命中数据库似乎不是最佳的。
如何在不使用数据库的情况下通过关联使用预加载的 has_many 构建记录?
期望:实际记录或接近的模拟,具有 .association(:hmtas).loaded?
可选:使用 factory_bot
答案是你没有。ActiveRecord 关联只是关系数据库之上的抽象,没有它就没有意义——关联是由外键关系定义的。
这就是为什么协会并没有真正规定存根的原因。
您可以存根getter 方法以返回对象数组:
allow(parent).to receive(:children)
.and_return(build_list(:children, 10))
但是您需要权衡敏锐度的损失与可能非常微不足道的性能提升。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句