代码之家  ›  专栏  ›  技术社区  ›  John Munsch

为什么Rake运行一个我找不到测试的模型?

  •  1
  • John Munsch  · 技术社区  · 17 年前

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

    令我遗憾的是,我还没有为这段代码编写任何测试,我决定开始编写一些,但这立刻阻止了我,因为我甚至无法在不失控的情况下运行Rake。

    1 回复  |  直到 17 年前
        1
  •  1
  •   Mike Woodhouse    17 年前

    我不确定这是Rake的错——我有一种感觉,当你加上 :environment 作为一个依赖项,您将启动整个Rails基础架构,这很可能涉及要求每个模型文件(这是相当疯狂的猜测——我还没有深入了解引导过程)。

    不管它发生了什么,似乎你的模型是必需的,在这一点上,一切都崩溃了。

    查看script/run和更有用的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搞砸你的测试。..