Я пытаюсь проверить, что кто-то может войти на мой сайт, выполнив запрос POST на мой SessionsController
. Я видел этот способ, рекомендованный в нескольких местах:Rails test - проверка, если пользователь вошел в систему с Devise
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
.
Есть ли более определенный способ в конечном счете проверить, зарегистрирован ли пользователь, и если да, то кто пользователь?
EDIT -
Например, следующий тест будет проходить
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 # создать действие:
def create
respond_to do |format|
format.js {
render nothing: true, status: 200
}
end
end
Может ли это помочь? http://stackoverflow.com/questions/23793597/how-to-access-devise-current-user-in-a-rspec-feature-test – tmn4jq
Боюсь, я не думаю, что это помогает. У меня нет проблем с вызовом current_user. – user1063998
является '.current_user' методом, который пытается войти в систему пользователя или является attr_reader для переменной экземпляра? Если первое, то кажется, что вы описываете, это ожидаемое поведение. –