1

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

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

令我感到羞耻的是,我还没有为这段代码编写任何测试,我决定开始编写一些测试,但这立即阻止了我,因为我什至无法运行 Rake 以获取现在存在的内容,除非它出现问题。

4

1 回答 1

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 搞砸你的测试......

于 2009-04-01T08:40:28.087 回答