Я использую Rails 5.2, Ruby 2.4.1 и Rspec. Я пытаюсь сделать тест автоматизации с использованием Rspec для обновления пароля пользователя. Я знаю, что код работает от ручного тестирования.
Тест RSpec не проходит условие @ user.update_attributes (user_params) в контроллере, а затем переходит в условие else. Таким образом, мой тест RSpec говорит, что пароли все еще равны друг другу. Как мне пройти тест RSpec, чтобы пройти условие?
Вот метод
# Creates user, saves old password, generates a url for user to go to, updates password, reloads user, and test if old password equals new password
context "with a valid token" do
it "updates the user's password and resets the token" do
test_users = User.create(first_name: 'chase', last_name: 'dougherty', email: 'chase@gmail.com', password: '1', password_confirmation: '1')
old_password = test_users.password
test_users.generate_password_reset_token!
patch :update, params: { id: test_users.password_reset_token, user: { password: 'newpassword', password_confirmation: 'newpassword' } }
test_users.reload
expect(test_users.password).to_not eq(old_password)
end
end
Вот контроллер
# Finds user, test if update_attributes is true, updates password, logs user in, redirects user, displays flash
def update
@user = User.find_by(password_reset_token: params[:id])
if @user && @user.update_attributes(user_params)
@user.update_attribute(:password_reset_token, nil)
session[:user_id] = @user.id
redirect_to '/maps'
flash[:notice] = "Password updated"
else
flash[:notice] = "Password reset failure."
render action: 'edit'
end
end
private
def user_params
params.require(:user).permit(:password, :password_confirmation)
end