【问题标题】:Rails tests, fixture & class loading orderRails 测试、夹具和类加载顺序
【发布时间】:2016-11-01 15:47:59
【问题描述】:

我有一个 ActiveRecord 类,它根据另一个表的内容动态添加范围。

(简化代码示例)

class Thing < ActiveRecord::Base

  Feature.all.each do |feature|
    scope feature.name, ->{joins(:feature).where("feature.name = #{feature.name})}
  end
end

应用 UI 的另一部分是“事物显示”,可让您搜索并将这些功能范围作为搜索的一部分应用。

这一切在正在运行的应用程序中运行良好。

然而,在测试中,似乎成功取决于加载内容的顺序。有时Thing 具有预期的范围,有时则没有。我想我可以通过在任何测试运行之前调用Feature.count 来强制Feature 类和固定装置首先加载,但这不起作用。

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

【问题讨论】:

  • 您确定这与thisthis 无关?
  • @NicNilov 我没有运行 Postgres,我的数据库中没有外键约束,并且测试通过/失败取决于测试的执行顺序。所以这些链接的问题不适用。

标签: ruby-on-rails testing fixtures


【解决方案1】:

为了确保在上课之前加载固定装置,有几个方向可以探索。

一种是检测夹具何时完成加载并强制重新加载Thing 类以生成适当的范围。问题是我找不到检测固定装置加载事件的方法。一个无关紧要的问题是,在 config.cache_classes = true 存在的情况下重新加载单个类会非常麻烦。

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

【讨论】:

    猜你喜欢
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 2018-02-07
    • 2011-01-12
    • 2017-02-27
    • 1970-01-01
    • 2011-11-23
    相关资源
    最近更新 更多