Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 rails3猴子补丁生成器_Ruby On Rails 3_Generator_Monkeypatching - Fatal编程技术网

Ruby on rails 3 rails3猴子补丁生成器

Ruby on rails 3 rails3猴子补丁生成器,ruby-on-rails-3,generator,monkeypatching,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

我想对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

据我所知,test框架的每个钩子都应该调用rspec modded生成器,rspec应该管理其余部分(回退)。但它不起作用:出于某种原因,单元测试生成器启动了!怎么了?我真的不明白…

你可以把你的猴子补丁放在任何地方,只要它能加载。对于rails,您通常会将其放在/lib文件夹中。

这就是问题所在。脚手架生成器运行时加载了哪些文件?我认为它加载了基本环境(脚本/rails)。但您必须知道,/lib在默认情况下不会加载,如果将其设置为自动加载,则可能永远不会加载它。所以你需要明确地把require放在某个地方
# 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
# config/application.rb
# ...
config.generators do |g|
  g.test_framework :rspec_modded, :fixture => false, fixture_replacement: nil
  g.fallbacks[:rspec_modded] = :rspec
end