У меня есть простое приложение для сообщений, чтобы узнать RSpec, где один пользователь может создавать сообщения другому пользователю (только зарегистрированные пользователи могут писать сообщения).Я не использовал devise для входа или регистрации пользователей, это приложение настолько простое, насколько это возможно, только для обучения rspec.
Я хочу протестировать метод create в контроллере сессий:
class SessionsController < ApplicationController
before_action :logged_in_redirect, only: %i[new create]
def new; end
def create
user = User.find_by(username: params[:session][:username])
if user && user.authenticate(params[:session][:password])
session[:user_id] = user.id
flash[:success] = 'You have successfully logged in'
redirect_to root_path
else
flash.now[:error] = 'There was something wrong with your login'
render 'new'
end
end
def logged_in_redirect
if logged_in?
flash[:error] = 'You are already logged in'
redirect_to root_path
end
end
Это соответствующий код из моей спецификации контроллера сессий:
RSpec.describe SessionsController, type: :controller do
describe 'POST #create' do
context 'when password is correct' do
let(:user) { User.create(username: 'John', password: 'test123') }
it 'redirect to root path' do
post :create, session: { username: 'John', password: 'test123' }
expect(response).to have_http_status(:redirect)
end
end
end
end
Ошибка говорит о неопределенном методе `[] 'для nil: NilClass.Работает как положено в приложении.Что мне не хватает?Должен ли я использовать session[:user_id]
после let(:user)
?