铁轨猴子补丁发电机

时间:2013-02-17 22:26:24

标签: ruby-on-rails-3 generator monkeypatching

我想对rspec-rails生成器进行猴子补丁以生成_form.html_spec.rb模板。我知道怎么做,但不知道我应该把这个补丁放在哪里!

我做了什么:

# rspec_generator_patch.rb
module Rspec
  module Generators
    class ScaffoldGenerator < Base
      def generate_views_specs_with_form *args, &block
        generate_views_specs_without_form
        copy_view :_form
      end
      alias_method_chain :generate_views_specs, :form
    end
  end
end

我把这个文件放在哪里?谢谢。

编辑:

好吧,我认为问题几乎已经解决了。我没有使用猴子补丁,而是继承了特定的生成器并编辑了方法。有解决方案:

# lib/generators/rspec_modded/scaffold/scaffold_generator.rb
require 'generators/rspec/scaffold/scaffold_generator.rb'
module RspecModded
  module Generators
    class ScaffoldGenerator < Rspec::Generators::ScaffoldGenerator
      def generate_view_specs
        super
        copy_view :_form
      end
    end
  end
end

如果我rails g rspec_modded:scaffold在列表中并且如果手动调用(rails g rspec_modded:scaffold test)则实际工作。

# config/application.rb
# ...
config.generators do |g|
  g.test_framework :rspec_modded, :fixture => false, fixture_replacement: nil
  g.fallbacks[:rspec_modded] = :rspec
end

据我所知,每个hook_for :test_framework都应该调用rspec_modded生成器,而rspec应该管理其余的(回退)。但它不起作用:由于某种原因,unit_test生成器启动了!什么事?我真的不明白......

1 个答案:

答案 0 :(得分:0)

你可以将猴子补丁放在任何地方,只要它被加载。使用rails,通常将它放在/ lib文件夹中。