2

我有一个 Rails 生成器,我想制作它,除其他外,它将运行一些基于 yaml 文件的脚手架:

class MyGenerator < Rails::Generators::Base
    ...
    def run_scaffolds
        ...
        invoke 'scaffold', fields
        ...
    end
end

我正在调用此处描述的脚手架生成器。

问题是如果我尝试在单元测试中运行它:

class ScaffoldTest < Rails::Generators::TestCase
    tests MyGenerator
    destination File.expand_path("../tmp", File.dirname(__FILE__))
    setup :prepare_destination

    test "run scaffolds" do
        run_generator ["example_file.yaml"]
        # doesn't get to here
    end
end

我最终得到一个错误:

Errno::ENOENT: No such file or directory - .../tmp/config/routes.rb

这是因为 tmp 目录中没有 Rails 应用程序。我的问题是,如果没有 Rails 应用程序就无法执行这个生成器,我怎么可能测试它?当然,我不应该每次运行测试时都在 tmp 文件夹中创建一个新的 rails 应用程序吗?

4

1 回答 1

1

我决定使用 mocha 来终止对生成器的调用:

Rails::Generator.stubs(:invoke)
run_generator ["example_file.yaml"]

我选择了这个解决方案,因为它让我验证代码是否使用正确的参数调用生成器,并且不需要我在真正的 Rails 应用程序中实际运行生成器。

于 2013-11-03T08:34:36.260 回答