我有一个我想制作的rails生成器,除其他外,它将运行一些基于yaml文件的脚手架:
class MyGenerator < Rails::Generators::Base
...
def run_scaffolds
...
invoke 'scaffold', fields
...
end
end
我按照here所述调用脚手架生成器。
问题是如果我尝试在单元测试中运行它:
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应用程序吗?
答案 0 :(得分:1)
我决定使用mocha来停止对生成器的调用:
Rails::Generator.stubs(:invoke)
run_generator ["example_file.yaml"]
我选择了这个解决方案,因为它让我验证代码是否使用正确的参数调用生成器,并且它不需要我在真正的rails应用程序中实际运行生成器。