2013-02-17 86 views
0

我想猴子補丁rspec-rails生成器來生成_form.html_spec.rb模板。我知道那是怎麼做到的,但不是我應該放這個補丁的地方!rails3猴子補丁生成器

我做了什麼:

# 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:腳手架是在列表,如果手動(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生成器啓動了!什麼事?我真的不明白...

回答

0

你可以把你的猴子補丁放在任何地方,只要它被加載。有了rails,你通常會把它放在/ lib文件夾中。

+0

這就是問題所在。腳手架發電機運行時加載了哪些文件? – Iazel 2013-02-17 22:56:11

+0

我認爲它加載了基本的環境(腳本/ rails)。但是你必須知道,/ lib沒有默認加載,如果你將它設置爲自動加載,那麼它可能永遠不會被加載。所以你需要明確地把需求放在某處 – Speed 2013-02-17 23:10:21

+0

我已經取得了一些進展...... – Iazel 2013-02-18 01:16:10