我有麻煩諷刺應該從authlogic麻煩。從摩卡應用程序嘲笑authlogic
我有以下的測試夾具:
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
的問題是,在ApplicationController中的require_user方法仍然沒有得到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'這樣的行對於「將變量結果的值設置爲foo對象的bar屬性,但只有在設置了foo變量時纔是方便的簡寫」。如果foo沒有設置,'foo && foo.bar'會返回'nil'。如果設置了foo,則返回foo.bar的值。 – Chris 2010-09-07 11:12:51
不夠公平,但我仍然認爲將其擴展到更多行可以更容易地弄清楚測試中出現了什麼問題。我已經更新了我的答案,以消除不正確的返回值假設。 – Shadwell 2010-09-07 11:14:33
另外,'current_user'方法的返回值不是'current_user_session.record'的值嗎?如果某些事情出現問題,那麼可能是「無」。 – Shadwell 2010-09-07 11:20:07