search
LoginSignup
7

More than 1 year has passed since last update.

posted at

updated at

RspecでDevise認証を使ったテストを行う方法【Rails5編】

参考記事

rspecのテスト環境でdeviseにログインする方法【rails】

こちらに大まかな実装の流れを分かりやすく解説して頂いていたので、共有させていただきます。

やりたいこと

上記、参考記事に書かれている方法をRails5でも行えるようにする。

実装

参考記事と照らし合わせながら下記の実装解説をお読みください。

1. support配下を読み込み可能にする

spec_rails_helper.rb (修正前)
# Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
spec_rails_helper.rb (修正後)
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }

コメントアウトのままだとsupport配下が読みこめていないのでコメントアウトを解除。

2. controller_macrosの作成

spec/support/controller_macros.rb (修正前)
module ControllerMacros
  def login_admin(admin)
    @request.env["devise.mapping"] = Devise.mappings[:admin]
    sign_in admin
  end

  def login_user(user)
    controller.stub(:authenticate_user!).and_return true
    @request.env["devise.mapping"] = Devise.mappings[:user]
    sign_in user
  end
end
spec/support/controller_macros.rb (修正後)
module ControllerMacros
  def login_admin(admin)
    @request.env["devise.mapping"] = Devise.mappings[:admin]
    sign_in admin
  end

  def login_user(user)
    allow(controller).to receive(:authenticate_user!).and_return(user)
    @request.env["devise.mapping"] = Devise.mappings[:user]
    sign_in user
  end
end

8行目に注目してください。修正前はstubと書かれていますがこのままだとエラーが出ちゃうので変更。

3. deviseのtest_helperとmacrosをcontroller内で使えるようにする

spec_rails_helper.rb (Rails5未満)
RSpec.configure do |config|
  config.include Devise::TestHelpers, type: :controller
  config.include ControllerMacros, type: :controller
end
spec_rails_helper.rb (Rails5)
RSpec.configure do |config|
  config.include Devise::Test::ControllerHelpers, type: :controller
  config.include ControllerMacros, type: :controller
end

3行目に注目してください。config.include Devise::TestHelpers, type: :controllerRails5からはこの書き方は廃止されたのでconfig.include Devise::Test::ControllerHelpers, type: :controllerに変更。以上です。

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
What you can do with signing up
7