ビリヤード系筋トレプログラマ

プログラミング, 筋トレ, ビリヤード, エンジニア, etc

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

まとめ

RailsじゃないRspecの情報が少なすぎて自分でどうにかするしかない。
テストを書く時には使用するGemをあらかじめちゃんと考えてから書く