Devise (gem)とRSpecでモデルのテストに中々困難したため記事化したいと思います。
※ 注意) 私はRuby初心者です。
間違っている箇所等ございましたらコメント等頂きたいです。
因みに、私はこの設定をしないとこんな感じのエラーが出てしまっていました。
$ bundle exec rspec spec/models/user.rb
...
Failure/Error: u = FactoryGirl.create(:user, id: id,
RuntimeError:
Could not find a valid mapping for #<User id: 1, (中略...)
まず、本題に入る前に下記のことについて確認しておきましょう。
-
Gemfile
にgem 'devise'
(バージョン略)が記載されている - 対象のモデル(今回はuser.rb)にDeviseの記述がされていること
user.rb
class User < ActiveRecord::Base
devise: :database_authenticatable, :registerable # etc...
設定
config/environments/test.rb
config/routes.rb
の2ファイルを編集します。
config/environments/test.rb
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config/routes.rb
# 対象のモデルが User であれば
devise_for :users
これだけ!!
このように記述することで正常にテストが動作するようになりました。
今回はtest
環境を使いたかったので
config/environments/test.rb
を編集しました。
が、別に違う環境でも動作すると思います。
その時は編集するファイルも適宜変更してくださいね。
※ 補足
config.action_mailer.default_url_options
は
railsからメールを送信する際のホストの設定です。