RSpecでテストするときにfactory_girlを使う

fixturesが担っていたテストデータのところにfactory_girlを使うイメージ?
複数テーブルにまたがるデータを定義するときにfixturesより格段にやりやすいみたい。
その利点はまだ実感できてないけどとりあえず使い方

環境

Rails3,bundle全盛だけどRails2の話

  • Rails2系
  • factory_girl 1.2.4

factory_girlインストール

$ gem install factory_girl

Rails2系だとこれではだめ。現在の最新版1.3.3がインストールされるがRails2系は1.2.4を使うようにREADMEに書いてあった。

If you want to use factory_girl with Rails versions prior to Rails 3, use version 1.2.4.

$ gem install factory_girl -v 1.2.4

使うための設定

config/enviroments/test.rb
#追記
config.gem "factory_girl", :version => '1.2.4'

Rails2系(Rails2.1から?)で使えるconfig.gemで定義するとrequireまでやってくれるので便利

## enviroment.rbに書いとくとこうできる
## config.gemsに定義されてるものの状態みれる
$ rake gems
## インストールできる
$ rake gems:install

READMEにはその時点だからだと思うけど--source http://gemcutter.org指定しろってある
今gemcutter.orgはrubygems.orgに転送されてるし、標準のリポジトリでそもそもインストールできるので指定はしてない

設定するファイル

rspecであれば下記のファイルに書いておけばspec内で使える

  • spec/factories.rb
  • spec/factories/*.rb

使い方

spec/factories.rbとかに適当に定義する

Factory.define :user, :class => User do |u
  u.name "homuhomu"
  u.email "homu@example.com"
end

spec/**/*.rbとかの中で呼び出せる

require File.dirname(__FILE__) + '/../spec_helper'

describe User do
  before do
    @user = Factory.build(:user)
  end
end

Factory.buildだとセーブしないでFactory.createだとセーブして的なまあ一緒ですね。
factories.rbはRubyのファイルなので普通にかけるのも便利そう。


READMEにexampleが充実してるので困ったらREADME見ればよさそうなのもよいすな