тест rspec не пройден - пользователь вышел - учебник по Ruby on Rails 3, глава 9 - PullRequest
1 голос
/ 10 февраля 2011

Нашел похожий вопрос ( Учебное пособие по 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, но не уверен, что мне удалось сделать по-другому.

Ответы [ 3 ]

1 голос
/ 21 апреля 2011

Я попробовал вышеупомянутое с успехом.Я не думаю, что сервер должен иметь к этому какое-либо отношение, так как ошибка генерируется rspec.

0 голосов
/ 17 сентября 2011

Может быть, проблема в том, что вы def destroy дважды в SessionsController?

class SessionsController < ApplicationController
  def destroy
    sign_out
    redirect_to root_path
  end

  .
  .
  .

  def destroy
  end
0 голосов
/ 16 марта 2011

Итак, никаких обещаний здесь нет, но я тоже видел странное поведение сеанса, связанного с rspec, которое исчезло, когда я сделал это:

rake db: reset
rake db: migrate
Остановить автотестctrl-c
Перезапустить автотест
Остановить сервер rails с помощью ctrl-c
Перезапустить сервер rails с помощью "rails s"

У меня нет хорошего объяснения, почему это может быть исправленопроблема, но это имеет для меня.Вообще, я очень впечатлен качеством учебника Майкла Хартла.Когда возникали проблемы, они всегда были результатом того, что я делал что-то «не так».Эта конкретная проблема, а также другая, относящаяся к CH 11, заставили меня задуматься о том, что какое-то неожиданное поведение может быть связано с состоянием БД.Мои плохо сформированные вопросы и ответы по проблеме CH 11 здесь Rails 3 Tutorial Глава 11 «Ошибка проверки: электронная почта уже получена» ошибка

Хартл не использует рекомендуемые способы переноса БДвернуться к отправной точке.Выше мой подход.Там могут быть лучшие, которые я был бы рад видеть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...