RailsじゃないRspecで書かれたテストに途中からFactoryGirl導入
背景
Railsではない環境でFactoryGirlを導入したけど、既存で書かれたテストに影響を
及ぼしたくない。
Rails環境だとFactoryGirl_railsがfactoryファイルのパスを自動で読み込んでくれるため
特に設定する必要はないが、ノーマルのFactoryGirlだと
definition_file_paths
find_definitions
の2メソッドを使用してFactoryファイルの場所を指定してあげる必要がある。
もし。既存テストをFactoryGirl無しで書かれている場合はspec_helper内で
設定を分ける方法が必要
shared_contextの活用
Factoryを使用するspecと使用しないspecでshared_contextを分けて定義する。
/spec/spec_helper.rb
shared_context 'Factory init', :factory_init => true do RSpec.configure do |config| # factory method config.include FactoryGirl::Syntax::Methods # factory path FactoryGirl.definition_file_paths = [File.expand_path('/home/imada/rails_app/spec/factories/', __FILE__)] FactoryGirl.find_definitions end end
このshared_contextを定義することで既存specとfactoryを使用したspecとで設定を分けることができる。
Railsだと
config.include FactoryGirl::Syntax::Methods
だけでいいっぽいけど
後は実際のspecファイル内で
RSpec.describe "factory test", :factory_init => true do end
を記述すればOK