2014/01/09

railsでテストデータの管理にfactory_girlを使うのが良さそう。

RSpecを使ってテストを書いていて、 コードの量が増えるとテストで使うデータの管理が煩わしくなるなぁ、と思っていた。 何しろfixturesをymlで書くので、1対多とか多対多の関連を持つデータを定義、管理するのが面倒。

そこで今更ながら知ったのが factory_girl というgemです。

A library for setting up Ruby objects as test data.
とあり、RSpecのfixtures地獄から解放してくれるスグレモノっぽい。

factory_girl導入

Gemfileに、

group :test do
  gem 'factory_girl_rails'
end
を足して、
$ bundle
すると利用可能に。

データの定義

例えば、ymlに、

default:
  id: 1
  email: test@test.com
  password: password
  password_confirmation: password
と書いて定義していたレコードが、
FactoryGirl.define do
  factory :user do
    id 1
    email 'test@test.com'
    password 'password'
    password_confirmation 'password'
  end
end
という具合にRubyコードで定義できるようになる。

データの利用

ymlによるfixturesを利用する場合は、各specで、

fixtures :users
でテストデータを投入して、
before(:each) do
  @user = users :default
end
とか書いて、データを読み込んでいたが、factory_girlを使うと、
before(:each) do
  @user = FactoryGirl.create(:user)
end
ってするだけで、データが読み込める。このcreateは、DBにレコードをinsertし、そのレコードをfindして返すみたいな動作をするけど、 他にも、
  • create
  • build
  • attributes_for
  • build_stubbed
というメソッドが用意されていて、テストケースに応じて使い分けることができる。

詳しいドキュメントは、githubのGETTING_STARTED.mdにあるので、よく読んで使い方をマスターしたい。

0 件のコメント: