ruby-on-rails - 对调用另一个生成器的 Rails 生成器进行单元测试

标签 ruby-on-rails ruby unit-testing ruby-on-rails-4

我有一个 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 应用程序吗?

最佳答案

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

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

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

关于ruby-on-rails - 对调用另一个生成器的 Rails 生成器进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19698553/

相关文章:

ruby-on-rails - RoR Routes 错误 : From a link_to built URL, 路由出现在 rake 路由中

c++ - 要使用 Ruby 或 C++ 为 Rails 应用程序编写后台进程代码?

ruby-on-rails - 为什么参数包含有关 Controller 和操作的详细信息?

ruby-on-rails - 如何将数据库结果中的行转换为列

c# - 如何在单元测试 Web API 中使用匿名类型结果进行断言?

java - 整理 JUnit 4 动态套件的详细信息

ruby-on-rails - 如何在 Ruby on Rails 中内联编写条件三元运算符?

ruby-on-rails - 页面加载完成后图像消失

ruby-on-rails - 如何从 ActiveRecord 数组中获取 "shift"对象

unit-testing - 单元测试自定义 Doctrine 存储库