Есть sessions_controller создающий сессию на базе модели с
has_secure_passwordclass SessionsController < ApplicationController
layout 'signin'
def create
user = User.find_by_email(params[:sessions][:email])
if user && user.authenticate(params[:sessions][:password])
session[:user_id] = user.id
redirect_to user_tasks_path(user), notice: 'Вы вошли в систему.'
else
flash[:alert] = 'Неверные почта или пароль'
render :new
end
end
end
Пытаюсь сделать тестирование. Идея взята
отсюда.
RSpec.describe SessionsController, type: :controller do
describe '#create' do
let(:user_params) do
{email: Faker::Internet.email, password: 'password'}
end
let(:user) { FactoryGirl.create(:user, user_params) }
it 'created user should exist' do
db_user = User.find_by_email(user.email)
expect(db_user.email).to eq(user.email)
end
context 'with valid params' do
before :each do
post :create, { sessions: user_params }
end
it 'should redirect to user tasks' do
expect(response).to render_template(:index)
end
it 'flash message should be good' do
expect(flash[:notice]).to eq 'Вы вошли в систему.'
end
it 'should authenticate user' do
expect(session[:user_id]).to eq(user.id)
end
end
...
Соответственно тесты валятся:
Я так понимаю после "post :create, { sessions: user_params }" аутентификации не происходит. В чём может быть проблема?