Я пытаюсь пройтись по учебному пособию Хартла по Ruby on Rails , в то время как обновляю его примеры до Rails 3.1, изучая railscasts и stackoverflow-посты, потому что мне нравится трудное обучение.Моя версия включает в себя has_secure_password
.
К сожалению, я столкнулся с проблемой.Почему-то я не могу позвонить test_sign_in (@user)
с users_controller_spec.rb
.Я могу позволить тестам пройти путем обмана и использования post :create, :user => @attr
, потому что этот метод также вызовет sign_in
.Более того, я вполне уверен, что это в основном проблема, связанная с RSpec, так как все провальные тесты действительно работают при попытке сценария в браузере.
Тест, похоже, вызывает post :create, :session => @attr
, но не проходитна самом деле войти. Я думал, что это может иметь какое-то отношение к моей фабрике;но я не думаю, что с этим что-то не так.После нескольких часов попыток я потерял надежду и обратился к вам, ребята.Было бы здорово, если бы вы могли помочь мне!
провал тестов в users_controller_spec.rb
describe "PUT 'update'" do
before(:each) do
@user = Factory(:user)
@attr = { :email => @user.email, :password => @user.password }
post :create, :session => @attr
#sign_in(@user)
end
describe "failure" do
before(:each) do
@attr = { :email => "", :name => "", :password => "",
:password_confirmation => "" }
end
it "should render the 'edit' page" do
put :update, :id => @user, :user => @attr
response.should render_template('edit')
end
session_controller.rb метод создания
class SessionsController < ApplicationController
def create
user = User.find_by_email(params[:session][:email])
if user && user.authenticate(params[:session][:password])
if params[:remember_me]
sign_in_permanent (user)
else
sign_in (user)
end
redirect_to user, :notice => "Logged in!"
else
flash.now[:error] = "Invalid email or password"
@title = "Sign in"
render 'new'
end
end
Примечание. Я понимаю, что здесь я не придерживаюсь DRY, к сожалению, пока не знаю, как передать параметры в метод sign_in: (
session_helper.rb sign_in метод
def sign_in(user)
cookies[:remember_token] = user.remember_token
current_user = user
@current_user = user
end
Если я не ошибаюсь, это весь код, который связан с этой «ошибкой». Очевидно, я мог бы опубликовать гораздо больше кода, но, вероятно, не будупомогите чем-нибудь. Если это предположение неверно, пожалуйста, дайте мне знать, и я опубликую все необходимое.