Rails で mountable なのを作ってる時、test/dummy 以下の FactoryGirl が二重に呼び出されてしまいアレだった。

Rails で mountable なのを作ってる時、test/dummy 以下の FactoryGirl が二重に呼び出されてしまいアレだった。

ネット上で見つけたコードを馬鹿正直にコピペしていたら死んだし俺が悪かったという話です。

いつもの感じで

rails plugin new new_plugin --mountable
cd new_plugin
rails g rspec:install

したままではプラグイン用に生成される factories にパスが通ってないので以下のような感じで rails_helper.rb に加えましょうという記述がありました。

require 'factory_girl_rails'
FactoryGirl.definition_file_paths << File.join(File.dirname(__FILE__), 'factories')
FactoryGirl.find_definitions

これ確かに直下の factories にパスが通ってめでたいのですが、すでに通っている test/dummy/spec/factories に factory があった場合、FactoryGirl.find_definitions であらためて読み込まれてしまい死にます。かといってこれをはずすと肝心の直下の factories が反映されないのですが、テストごとに FactoryGirl がちゃんと更新されるように

RSpec.configure do |config|
  # 略

  config.before(:all) do
    FactoryGirl.reload
  end
end

このようなコードがいれてあると実行前に全部読まれるので大丈夫です。

なので、マウンタブルに rspec + FactoryGirl したいときは

require 'factory_girl_rails'
FactoryGirl.definition_file_paths << File.join(File.dirname(__FILE__), 'factories')

だけで ok っぽい、よかったですねというポカミスのお話でした。