RSpecでdeviseを使う方法

こんにちは!kossyです!




本日気になったニュースはこちら
dev.classmethod.jp

サーバレスについて少し調べてみましたが、よくわかりませんでした、、、
オンプレやレンタルサーバとも違うみたいですね。

このサービスを用いることで、オンプレやレンタルサーバと比較して
ランニングコストを抑えることができると仮定するならば、
今後はクラウドサーバー環境構築のノウハウを蓄積するよりも、
こちらの技術のノウハウを貯めた方がいいかもしれません。











さて、今回はRailsのテストフレームワークであるRSpecで認証系のGemとして有名なdeviseを使う方法を
ブログに残してみたいと思います。



環境
Rails 5.1.6
Ruby 2.5.1
RSpec 3.8.0
MacOS Mojave





マクロファイルの作成

controller_macros.rbという名前でファイルを作成し、loginメソッドを定義します。
macrosってなんだ?と思いましたが、
マクロ(ヘルパーメソッド)を定義してフィーチャースペックのユーザー切替えを楽に行う - Qiita

こちらによると、マクロ = ヘルパーメソッド
という認識で間違いなさそうです。

以下参考コードです。

spec/support/controller_macros.rb

module ControllerMacros
  def login(user)
    @request.env["devise.mapping"] = Devise.mappings[:user]
    sign_in user
  end
end


マクロファイルの読み込み

次にmacrosファイルを読み込む記述をします。
include以降の記述でdeviseとmacrosを読み込む処理を記述しています。

spec/rails_helper.rb

RSpec.configure do |config|
  Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
  config.include Devise::Test::ControllerHelpers, type: :controller
  config.include ControllerMacros, type: :controller
end

これでRSpec内でdeviseを使うことができます。





参考にさせていただいたサイト
rspecのテスト環境でdeviseにログインする方法【rails】 - Qiita
マクロ(ヘルパーメソッド)を定義してフィーチャースペックのユーザー切替えを楽に行う - Qiita