Я пытаюсь проверить, что кто-то может войти на мой сайт, отправив запрос POST на мой SessionsController
. Я видел, как этот способ рекомендуется в нескольких местах:
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 для переменной экземпляра? Если первое, то кажется, что вы описываете ожидаемое поведение. - person max pleaner   schedule 05.09.2016current_user
- это метод, который попытается войти в систему. Если вы запустите тест, который я описал в вопросе, с полностью пустым действием контроллера, тест все равно пройдет - person user1063998   schedule 08.09.2016session
? - person Narasimha Reddy - Geeker   schedule 08.09.2016