一から勉強させてください( ̄ω ̄;)

最下級エンジニアが日々の学びをアウトプットしていくだけのブログです。

Railsでfakerのバージョンを上げたらspecが壊滅したけど設定で乗り越えたメモ

最近、Railsプロジェクト内で使用しているfakerのバージョンを最新(v1.4.3)に上げたら、今まで通っていたspecが壊滅したので、その際のメモです。

状況把握

こちらの記事に記述されているものと全く同じ状況に陥ったと思われます。

プロジェクト内のlocaleはデフォルトでI18n.locale = :jaにしていたのでfakerのlocaleも:jaにセットされ、その結果Faker::Internet.emailFaker::Internet.urlが壊れたのだと思います。(前はv1.1.2ぐらいだったのですが、fakerのlocale設定まわり変わったんですかね。。)

対策

プロジェクト内でfactory_girlも使用していたので、config/initializers/factory_girl.rbを用意して

if defined? Faker
  Faker::Config.locale = :en
end

のようにしました。

わざわざfactory_girl.rbに設定している理由はfactory_girl

$ rails c
[1] pry(main)> FactoryGirl.create :user
以下略

のようにdevelop環境でも使うことを想定しているからです。

spec/factories/users.rbなどのfactoryの中で

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

みたいにガンガンfaker使ってたので、rails cで毎回、Faker::Config.locale = :enを呼ばないといけないのもダルいし。。

もしtest環境だけでいいやーって感じなら、spec/support/faker.rbなどに

RSpec.configure do |config|
  config.before(:suite) { Faker::Config.locale = :en }
end

とかでもいいんじゃないかと思います。

まとめ

テスト落ちまくって心臓に悪かったけど、おかげでバージョンの違いで使えなかったfakerのメソッドが使えるようになりました。

同様の悩みを抱えている方のお役に立てれば幸いです。

参考