Date: 2018/10/26 Cate: rails, ruby Tags:

Railsでrspecでテストを書くときに、deviseを使っているとdeviseでログインの処理をしてからテストをする、ということがあります。
ログインの処理は
How To: Test controllers with Rails (and RSpec)
ここに書いてあるとおりなのですが、この通りにやってもどうしてもログインができずハマってしまったのでメモ。

deviseでconfirmableを使っている場合、上記のサイトのやり方ではsign_in userで失敗するため、user.confirmを呼ぶ必要がありました。

module ControllerMacros
  def login_user(user=nil)
    @request.env["devise.mapping"] = Devise.mappings[:user]
    user ||= FactoryBot.create(:user)
    user.confirm # これが必要!
    sign_in user
  end
end

こんなかんじです。

Leave a Reply