« Kalafina / After Eden。 | トップページ | 【速報】我が家の十月桜が咲き始めました。 »

Radiant CMS 0.9.1のExtension開発でFactoryGirlを使う。

RADIANT_ROOT(radiantコマンドで生成するディレクトリ)にspec/factories/を置くべし! ←結論

問題:

  • FactoryGirlは通常spec/factories/以下にテストデータの定義を置く
  • Extensionの場合、vendor/extensions/<エクステ名>/spec/が該当(するはず)
  • だがしかし、ここに定義を置いても読み込んでいる気配が無いんだなこれが
  • あ、FactoryGirlのバージョンは1.2.4 (Rails2なので)

原因:

  • FactoryGirlの検索パスは、初期状態でRAILS_ROOT/test/factories/とRAILS_ROOT/spec/factories/ (factory_girl-1.2.4/lib/factory_girl.rb)
  • Radiant CMSの場合、みょんな小細工がいろいろ入っていてRAILS_ROOT = RADIANT_ROOTになる
  • エクステのディレクトリ内でrake specしても、同様。一度RADIANT_ROOTまで上がって、そこからspecとかを呼び出している
  • なので、FactoryGirlも一生懸命RADIANT_ROOT/spec/factories/を探していたようで。

対策:

取り敢えずの逃げとしては、RADIANT_ROOTにvendor/extensions/<エクステ名>/spec/のシンボリックリンクを作ればOK。

しかしこの方法では複数のextension開発に対応できず、あとRADIANT_ROOTからvendor/extensions/<エクステ名>/spec/へのパスが2種類になってしまうので、何かの拍子に予期せぬ誤動作がでそうで怖い。

しかしextension開発中にいちいち上のほうの階層にテストデータを置きに行くのもたるい。

やり方をまだ確認していないけど、たぶんspec_helperあたりでextensionごとにfactories/の位置をFactoryGirlに教えることができると思うので、それを確立するのが一番良い気がする。

共通で使うテストデータ(たとえばRadiantCMS本体に元からあるテーブル類とか)はRADIANT_ROOT/spec/factories/に置き、extension固有データは各spec/に置く、とかが一番スマートか?

|

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/28934/53009948

この記事へのトラックバック一覧です: Radiant CMS 0.9.1のExtension開発でFactoryGirlを使う。:

コメント

コメントを書く