我有一个ActiveRecord类,它根据另一个表的内容动态添加了作用域。
(简化代码示例)
class Thing < ActiveRecord::Base
Feature.all.each do |feature|
scope feature.name, ->{joins(:feature).where("feature.name = #{feature.name})}
end
end
该应用程序用户界面的另一部分是“Thing display”,可让您搜索并应用这些功能范围作为搜索的一部分。
这一切在正在运行的应用程序中运行良好。
然而,在测试中,似乎成功取决于加载内容的顺序。有时Thing
具有预期的范围,有时则不具有预期的范围。我想我可以在任何测试运行之前通过调用Feature
强制Feature.count
类和灯具加载,但这不起作用。
有没有办法强制加载类/灯具来解决这个问题?
答案 0 :(得分:0)
目标是确保在课前加载灯具,有几个方向可以探索。
一个是检测夹具何时完成加载并强制重新加载Thing
类以生成适当的范围。这个问题是我找不到检测夹具加载事件的方法。一个切线问题是,在config.cache_classes = true
存在的情况下重新加载单个类会非常黑客。
另一个更有前途的方法在this answer中描述,包括将测试运行器任务放在一个包装器中,以确保首先加载夹具。