inf
@inf
DevOps Engineer

Как тестировать sessions_controller?

Есть sessions_controller создающий сессию на базе модели с has_secure_password

class 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
...

Соответственно тесты валятся:
308a47459b574e3b9b09ffd58970be74.png

Я так понимаю после "post :create, { sessions: user_params }" аутентификации не происходит. В чём может быть проблема?
  • Вопрос задан
  • 185 просмотров
Решения вопроса 1
inf
@inf Автор вопроса
DevOps Engineer
Правильный ответ передавать переменную в развёрнутом виде))
let(:user) { FactoryGirl.create(:user, user_params) }

    context 'with valid params' do

      before :each do
        post :create, sessions: {email: user.email, password: user.password }
      end
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
evgenykungurov
@evgenykungurov
Программист Ruby/Rails/Системный администратор
Воспользуйтесь гемом capybara, там проще тестирование
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы