Нашел похожий вопрос ( Учебное пособие по Ruby on Rails не прошло ), но его ответ не подошел к моей проблеме. Пытался включить как можно больше необходимой информации.
Ошибка Rspec:
Отказы:
1) SessionsController DELETE 'destroy' должен выйти из системы
Ошибка / Ошибка: controller.should_not be_signed_in
ожидается подписано? вернуть ложь, получил истину
# ./spec/controllers/sessions_controller_spec.rb:58:in `блок (3 уровня) в '
Тест:
describe "DELETE 'destroy'" do
it "should sign a user out" do
test_sign_in(Factory(:user))
delete :destroy
controller.should_not be_signed_in
response.should redirect_to(root_path)
end
end
SessionsController:
class SessionsController < ApplicationController
def destroy
sign_out
redirect_to root_path
end
def new
@title = "Sign in"
end
def create
user = User.authenticate(params[:session][:email],
params[:session][:password])
if user.nil?
flash.now[:error] = "Invalid email/password combination"
@title = "Sign in"
render 'new'
else
sign_in user
redirect_to user
end
end
def destroy
end
end
Помощник по сессиям
module SessionsHelper
def sign_in(user)
cookies.permanent.signed[:remember_token] = [user.id, user.salt]
self.current_user = user
end
def signed_in?
!current_user.nil?
end
def sign_out
cookies.delete(:remember_token)
self.current_user = nil
end
def current_user=(user)
@current_user = user
end
def current_user
@current_user ||= user_from_remember_token
end
private
def user_from_remember_token
User.authenticate_with_salt(*remember_token)
end
def remember_token
cookies.signed[:remember_token] || [nil,nil]
end
end
Вся помощь приветствуется. Это не первый раз, когда я сталкиваюсь с проблемой, прорабатывая книгу, но это первый раз, когда я не смог ее решить (и, как и в других случаях, я уверен, что это моя ошибка :-) ). Я даже просмотрел репозиторий git, но не уверен, что мне удалось сделать по-другому.