Как проверить обновление пароля пользователя в RSpec - PullRequest
0 голосов
/ 27 июня 2018

Я использую 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

1 Ответ

0 голосов
/ 27 июня 2018

Если строка update_attributes терпит неудачу, у вас, вероятно, есть некоторые проверки на пользовательской модели, которые запускают и заставляют ее возвращать false.

Кроме того, я бы советовал не «создавать» объект пользователя в тестовых файлах. Тем более, что при первом запуске тестов создается запись, но затем каждый раз после этого он возвращает экземпляр пользователя, который не сохранен в базе данных (из-за нарушений уникальности данных), и тесты могут не выполняться как ожидается.

Если вы не хотите очистить созданные вами пользовательские объекты после запуска теста. В противном случае вы захотите использовать factory_bot и заглушить большинство этих моделей и вызовы базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...