У меня возникли проблемы с издевательством authlogic from shoulda.Mocking authlogic from toa with mocha
У меня есть следующий тестовый прибор:
class HomeControllerTest < ActionController::TestCase
context "on GET to index" do
setup do
activate_authlogic
UserSession.stubs(:current_user).returns(user_session)
get :index
end
should respond_with :success
end
def user_session
@user_session.stubs(:user).returns(Factory.build(:user))
@user_session.stubs(:record)
@user_session
end
end
Проблема заключается в том, что метод require_user в ApplicationController все еще не получают CURRENT_USER.
def current_user
puts "#{defined?(@current_user)}"
return @current_user if defined?(@current_user)
@current_user = current_user_session && current_user_session.record
end
def require_user
unless current_user
store_location
flash[:notice] = "You must be logged in to access this page"
redirect_to login_url
return false
end
end
Может ли кто-нибудь увидеть, что не так?
Последняя строка метода current_user прямо из AuthLogic. В Ruby строка, подобная 'result = foo && foo.bar', является удобным сокращением для« задавать значение результата переменной атрибуту bar объекта foo, но только если задана переменная foo ». 'foo && foo.bar' вернет' nil', если foo не был установлен. Если foo установлен, то возвращается значение foo.bar. – Chris
Достаточно справедливо, но я все же думаю, что расширение его на большее количество строк облегчит выяснение того, что происходит в тесте. Я обновил свой ответ, чтобы удалить неверное предположение о возвращаемом значении. – Shadwell
Также является ли возвращаемое значение метода current_user не значением 'current_user_session.record'? Который, если что-то пойдет не так, с помощью stubbing вполне может быть «nil». – Shadwell