LoginSignup
51
52

More than 5 years have passed since last update.

FactoryGirlとFakerを粗結合にする

Last updated at Posted at 2015-02-11

FactoryGirlでテスト用のデータを作成する際には、Fakerを使うとダミーデータを投入するのに非常に便利です。

例えばこんな感じ

user.rb
FactoryGirl.define do
  factory :user do
    email { Faker::Internet.email }
    name { Faker::Name.name }
  end
end

最初はこれで十分なのですが、データの数が多くなってくると、いろいろと面倒になってきます。

なにが問題か

データがFakerに完全に依存してしまいます。追加の制約ができて、Fakerだけではそれを満たせない場合、全ての箇所について手動で書きなおす必要があります。

先ほどのコードでは、名前は英語のものが入りますが、日本語の名前にしたくなった場合、Faker::Name.nameを使っている箇所をすべてFaker::NameJA.nameに書きなおさなければなりません。

解決法

FactoryGirlのsequenceを使用して、Fakerをラップします。

factories.rb
FactoryGirl.define do
  sequence :name { Faker::Name.name }
  sequence :email { Faker::Internet.email }
end
user.rb
FactoryGirl.define
  factory :user do
    email { generate :email }
    name { generate :name }
  end
end

このように定義しておけばFactoriGirlとFakerが粗結合になり、Fakerが生成したデータを加工したり、Fakerから別のライブラリに乗り換える際にも、sequenceの部分を書き換えるだけでよくなります。

参考

51
52
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
51
52