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 件のコメント:
コメントを投稿