コントローラーのテストをしています。
Sorceryでログイン認証をしています。
http://kikeda1104.hatenablog.com/entry/2016/09/29/220513
ここのページを参考にしました。
require 'rails_helper' RSpec.describe humanSessionsController, type: :controller do describe 'POST #create' do it 'ログイン成功時' do create(:human) post :create, { params: attributes_for(:human) } expect(:response).to redirect_to root_path end end end
しかしこちらのテストが通りません。
Expected response to be a <3XX: redirect>, but was a <200: OK>
というエラーが出てログイン認証に失敗しているようです。
こちらがコントローラーです。
class humanSessionsController < ApplicationController skip_before_action :require_login, except: [:destory] def new @human = human.new end def create @human = login(params[:login], params[:password]) if @human redirect_back_or_to(root_path, notice: 'ログインしました') else flash.now[:alert] = 'ログイン失敗' render action: 'new' end end def destroy logout redirect_to(new_human_session_path, notice: 'ログアウトしました') end end
前述したサイトの記述と違う所は
def create @human = login(params[:login], params[:password])
でSorceryが持つloginというメソッドを使っているという点です。
Rspecではこのloginというメソッドをうまく動かせていない?ような気がします。
また、Rspecの
describe 'POST #create' do it 'ログイン成功時' do create(:human) post :create, { params: attributes_for(:human) }
ここの記述はcreate(:human)でFactoryGirlでインスタンスを作成し
attribute_forでその作成したインスタンスを利用している、という認識でいいでしょうか?
それともこの2つのインスタンスは別でしょうか?
SorceryでのRspecに詳しい方お願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/07 19:44