Rails测试,夹具和类加载顺序

时间:2016-06-29 18:59:00

标签: ruby-on-rails testing fixtures

我有一个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类和灯具加载,但这不起作用。

有没有办法强制加载类/灯具来解决这个问题?

1 个答案:

答案 0 :(得分:0)

目标是确保在课前加载灯具,有几个方向可以探索。

一个是检测夹具何时完成加载并强制重新加载Thing类以生成适当的范围。这个问题是我找不到检测夹具加载事件的方法。一个切线问题是,在config.cache_classes = true存在的情况下重新加载单个类会非常黑客。

另一个更有前途的方法在this answer中描述,包括将测试运行器任务放在一个包装器中,以确保首先加载夹具。