【问题标题】:Why is Rake running a model for which I can find no test?为什么 Rake 运行一个我找不到测试的模型?
【发布时间】:2010-10-16 17:44:09
【问题描述】:

当我运行“rake”时,它会在我的 app/models 目录中的所有类中加载其中一个模型。问题是,它不是我要测试的模型,它只是我在那里的一个模型,它实际上与脚本/运行器一起使用,在后台运行并为我的主要 Rails 应用程序执行任务。在文件的末尾,我创建了上面类的一个新实例,然后为该类运行 main。

由于它无限循环,我绝对不希望它由测试代码启动。为什么单元测试或 Rake 会以任何方式涉及这个其他类?

遗憾的是,我没有为这段代码编写任何测试,我决定开始编写一些测试,但这立即阻止了我,因为如果没有它,我什至无法运行 Rake。乱七八糟的。

【问题讨论】:

  • 您可以在文件中添加一个“puts caller”以获取回溯,并希望看到正在加载它的内容
  • 杰夫,这是个好主意。谢谢!

标签: ruby-on-rails unit-testing rake


【解决方案1】:

我不确定这是 Rake 的错 - 我有一种感觉,当您添加 :environment 作为依赖项时,您正在启动整个 Rails 基础架构,这很可能需要每个模型文件(这很疯狂猜测 - 我还没有深入了解启动过程)。

无论发生什么,似乎都需要您的模型,此时所有的地狱都崩溃了。

查看 script/runner 和更有用的 railties/lb/commands/runner.rb,执行顺序似乎是这样的:

require 'boot' # boot the Rails app
eval(File.read(code_or_file)) # run what you asked for

第二行(实际上在 runner.rb 中的第 45 行附近)看起来像关键。如果您定义了一个包含运行模型的代码的单独脚本(例如,在 /lib 中?)会怎样?我认为这可能是一种更类似于 Rails 的方式。它可能会阻止 Rake 搞砸你的测试......

【讨论】:

  • 好的,我学到了。目前,我已经让脚本/运行程序简单地加载有问题的类,并在类结束时创建一个新实例并启动它的循环。所以 Rake 加载类变成了一件坏事。我将更改它,以便脚本/运行程序专门启动我需要启动的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-21
  • 2021-09-11
  • 1970-01-01
  • 2011-06-07
  • 1970-01-01
  • 2011-03-10
相关资源
最近更新 更多