我对Rails 4有点陌生,正在做一个需要身份验证的项目。我最近实现了Authlogic来处理它。
问题是我尝试使用HTTP post登录的会话控制器的特定测试,该测试无法将我重定向到登录路径。我对此很感兴趣,因为它可能会在以后使用我的Rails应用程序中的用户来记录Android应用程序。
这是测试:
sessions_controller_test.rb
test "should post create" do
this_user = users(:one)
post :create, username: this_user.username, password: 'secret'
assert_redirected_to admin_url
assert_equal this_user.id, current_user.id #session[:user_id]
end
这是正在测试的代码:
sessions_controller.rb
def create
@user_session = Session.new(params[:user_session])
if @user_session.save
flash[:notice] = "Login successful."
redirect_to admin_url
else
redirect_to login_url, alert: "Invalid user/password combination"
end
end
测试结果:
2) Failure:
SessionsControllerTest#test_should_post_create [/home/mario/railsprj/depot/test/controllers/sessions_controller_test.rb:13]:
Expected response to be a redirect to <http://test.host/admin> but was a redirect to <http://test.host/login>.
Expected "http://test.host/admin" to be === "http://test.host/login".
我也遇到过类似的问题。检查session_controller#create的else分支中的@user_session.errors
。或者暂时切换到@user_session.save!
,在验证错误时抛出错误。在我的例子中,是与用户相关的验证。Confirmed_at失败。
另一件要检查的事情是你的测试有setup :activate_authlogic
,这是在你可以Session.create.
希望现在给出答案还不算太晚。你代码中的问题是你缺少了参数。
你必须更改测试:
test "should post create" do
this_user = users(:one)
post :create, user_session: { username: this_user.username, password:
'secret'}
或者你必须改变控制器:
sessions_controller.rb
def create
@user_session = Session.new(username: params[:username], password: params[:password])
只有一个选择。我想最好是先解决,不过是一种滋味。
对
。