我正在尝试通过向我的SessionsController
发送POST请求来测试某人是否能够登录我的网站。我在几个地方看到过这种方法的推荐:
it 'must be able to sign in a user' do
user = create(:user)
post :create, format: :js, user: {email: user.email, password: user.password, remember_me: 0}
assert_response :success
@controller.current_user.must_equal user
end
但是这个测试并不正确。调用
@controller.current_user
将尝试使用提交的参数对用户进行身份验证,如果提供的电子邮件/密码正确,则会返回user
。但不能保证create
操作实际上正在调用sign_in
或current_user
。即使我重写测试以检查是否调用了这些方法,仍然有可能调用其他方法,例如
sign_out
。是否有更明确的方法最终检查用户是否已登录,如果已登录,用户是谁?
编辑 -
例如,以下测试将通过
it 'must sign in a user' do
@controller.current_user.must_equal nil
post :create, format: :js, user: {email: @user.email, password: @user.password, remember_me: 0}
assert_response :success
@controller.current_user.must_equal @user
end
当SessionsController#create动作执行时:
def create
respond_to do |format|
format.js {
render nothing: true, status: 200
}
end
end
.current_user
” 是一种尝试登录用户的方法,还是一个实例变量的“attr_reader”?如果是前者,那么你所描述的似乎是预期的行为。 - max pleanercurrent_user
是一个尝试登录用户的方法。如果您在完全空的控制器操作中运行我在问题中概述的测试,测试仍将通过。 - user1063998session
? - Narasimha Reddy - Geeker