当我运行“rake”时,它正在我的app / models目录中的所有类中加载其中一个模型。问题是,它不是我测试的,它只是我在那里的模型,它实际上与脚本/跑步者一起在后台运行并为我的主Rails应用程序执行任务。在文件的最后,我已经创建了一个上面的类的新实例,然后为该类运行main。
由于它无限循环,我绝对不希望它由测试代码启动。为什么单元测试或Rake会以任何方式涉及其他课程?
令我惭愧的是,我还没有为这段代码编写任何测试,我决定开始编写一些代码,但这会立刻阻止我,因为我现在甚至无法运行Rake,因为它现在没有它失控。
答案 0 :(得分:1)
我不确定这是Rake的错 - 我觉得当你添加:environment
作为依赖时,你会提出整个Rails基础设施,这可能涉及要求每个模型文件(这是相当疯狂的猜测 - 我还没有完全遵循引导过程。)
然而,它正在发生,似乎你的模型被要求,此时所有的地狱都会破裂。
看看脚本/跑步者,更有用的是,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-ish方法。它可能会阻止Rake搞砸你的测试......