一から勉強させてください

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

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 のメソッドが使えるようになりました。

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

参考