LoginSignup
4
3

More than 5 years have passed since last update.

RSpecでDeviseを使ったモデルをテストしたら RuntimeError:Could not find a valid mapping for というエラーが出た

Last updated at Posted at 2016-02-25

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, (中略...)

まず、本題に入る前に下記のことについて確認しておきましょう。

  • Gemfilegem '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からメールを送信する際のホストの設定です。

4
3
1

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
4
3