Rspec callbackのテスト(rails)
callback(before_actionなど)で利用するメソッドのテスト方法を書いていきます。
Controller
class DashBoardController < ApplicationController before_action :set_user def index # ... end private def set_user @user = User.where(id: session[:user_id]) end end
spec
今回は指定しませんが、infer_base_class_for_anonymous_controllers = false
にすると
Anonymous(匿名)クラスのデフォルト親クラスが、ApplicationController
になります。
rspec
DashBoardController#index
のコードを上書きして、callback
により呼ばれるメソッドの処理のみに集中できるように変えます。
RSpec.describe DashBoardController, type: :controller do describe 'GET #index' do # ... end describe '#set_user' do controller do def index render text: 'success' end end it '@userにユーザ情報がある時' do get :index expect(assigns[:user].present?).to be_truthy end it '@userにユーザ情報がない時' do get :index, session: { user_id: nil } expect(assigns[:user].blank?).to be_truthy end end end
anonymous controller - Controller specs - RSpec Rails - RSpec - Relish