Railsでfakerのバージョンを上げたらspecが壊滅したけど設定で乗り越えたメモ
最近、Rails プロジェクト内で使用しているfakerのバージョンを最新(v1.4.3
)に上げたら、今まで通っていた spec が壊滅したので、その際のメモです。
状況把握
こちらの記事に記述されているものと全く同じ状況に陥ったと思われます。
プロジェクト内の locale はデフォルトでI18n.locale = :ja
にしていたので faker の locale も:ja
にセットされ、その結果Faker::Internet.email
やFaker::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 のメソッドが使えるようになりました。
同様の悩みを抱えている方のお役に立てれば幸いです。