我们更新工厂女孩后,我的脚手架发电机停止工作。这就是发生的原因。首先,我的配置文件尝试为脚手架生成设置某些默认值,如下所示:
class Application < Rails::Application
config.app_generators do |g|
g.template_engine 'mizugumo:haml'
g.scaffold_controller 'mizugumo:scaffold_controller'
g.assets 'mizugumo:js_assets'
g.test_framework :lrdspec, :fixture => true
g.fixture_replacement 'lrdspec:factory'
g.fallbacks['mizugumo:haml'] = :haml
g.fallbacks[:lrdspec] = :rspec
end
...
end
其中:lrdspec是我公司的脚手架规格生成器的名称。但是,最新的factory_girl_rails,在其初始化程序中,粗略地强制config.generators.test_framework为'test_unit',除非您的测试框架完全是“:rspec”:
module FactoryGirl
class Railtie < Rails::Railtie
initializer "factory_girl.set_fixture_replacement" do
generators = config.respond_to?(:app_generators) ? config.app_generators : config.generators
if generators.options[:rails][:test_framework] == :rspec
generators.fixture_replacement :factory_girl, :dir => 'spec/factories'
else
generators.test_framework :test_unit, :fixture => false, :fixture_replacement => :factory_girl
end
end
我想弄清楚怎么做,就是生成我自己的初始化程序,它在FG的初始化程序之后运行,将test_framework设置回:lrdspec,就像我想要的那样。
我已经尝试将自己的railstie放入config / initializers,或者在config / application.rb中添加一个块到config.after_initialize,以及其他一些方法,但还没有找到解决方案。 (我对Rails的初始化序列的了解需要比我想的要深一些。
谢谢!
答案 0 :(得分:3)
好的 - 找到了解决方案。有时只是发布一个问题可以帮助你思考它。
答案是在我的脚手架生成器的宝石中设置我自己的初始化器,然后传递:after =&gt; “factory_girl.set_fixture_replacement”在我创建该块时初始化()。您可以指定的事实:在初始化程序之后没有记录在Rails docco中,但可以通过发现Initializable使用TSort对其初始化程序集合进行排序,研究TSort如何工作,以及发现存储的:after / :在TSort回调的方法中使用参数之前。
所以解决方法是将这个放在我自己的gem的配置Railtie中,这是提供脚手架生成器的那个:
initializer "lrd_dev_tools.set_generators", :after => 'factory_girl.set_fixture_replacement' do
generators = config.respond_to?(:app_generators) ? config.app_generators : config.generators
generators.test_framework :lrdspec, :fixture => true
generators.fixture_replacement 'lrdspec:factory'
end