Rails Test on Rails Tutorial, ArgumentError

В настоящее время я изучаю Ruby on Rails on Rails Tutorial. Когда я тестировал рельсы, я столкнулся с этой ошибкой.

бревно

ArgumentError: wrong number of arguments (given 2, expected 1)
    app/models/user.rb:35:in `authenticated?'
    app/controllers/account_activations_controller.rb:4:in `edit'
    test/integration/users_signup_test.rb:35:in `block in <class:UsersSignupTest>'

приложение/модели/user.rb

def authenticated?(remember_token)
    return false if remember_digest.nil?
    BCrypt::Password.new(self.remember_digest).is_password?(remember_token)
end

приложение/контроллеры/account_activations_controller.rb

def edit
    user = User.find_by(email: params[:email])
    if user && !user.activated? && user.authenticated?(:activation, params[:id])
      user.update_attribute(:activated,    true)
      user.update_attribute(:activated_at, Time.zone.now)
      log_in user
      flash[:success] = "Account activated!"
      redirect_to user
    else
      flash[:danger] = "Invalid activation link"
      redirect_to root_url
    end

тест/интеграция/users_signup_test.rb


test "valid signup information with account activation" do
    get signup_path
    assert_difference 'User.count', 1 do
      post users_path, params: { user: { name:  "Example User",
                                         email: "[email protected]",
                                         password:              "password",
                                         password_confirmation: "password" } }
    end

    assert_equal 1, ActionMailer::Base.deliveries.size
    user = assigns(:user)
    assert_not user.activated?
    log_in_as(user)
    assert_not is_logged_in?
    get edit_account_activation_path("invalid token", email: user.email)
    assert_not is_logged_in?
    get edit_account_activation_path(user.activation_token, email: 'wrong')
    assert_not is_logged_in?
    get edit_account_activation_path(user.activation_token, email: user.email)
    assert user.reload.activated?
    follow_redirect!
    assert_template 'users/show'
    assert is_logged_in?
  end
end

Не могли бы вы дать мне совет, чтобы решить эту проблему?

Теперь вы находитесь в том месте, где это не должно работать. «В приведенном выше коде используется метод authentication?, чтобы проверить, соответствует ли дайджест активации учетной записи заданному токену, но в настоящее время это не будет работать, поскольку этот метод специализирован для запоминающего токена». Пройдите дальше по учебнику, и вы исправите код и увидите цикл «красный-зеленый-рефакторинг».

Vasilisa 18.02.2019 06:56

Я нахожусь в главе 11. В моем коде отсутствует что-то, связанное с запоминанием токена?

poponga 18.02.2019 09:52

Вы в конце главы? Если да, перечитайте его с самого начала и измените свой код в соответствии с изменениями в руководстве. Изменения в 11.3.1, так что если вы где-то до этого - просто забыли про сломанные тесты и двигайтесь дальше, все будет хорошо :)

Vasilisa 18.02.2019 10:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, вы дали дополнительный параметр методу authenticated? во второй строке app/controllers/account_activations_controller.rb#edit.

Удалите его, и это должно сработать.

Я изменил user.update_attribute(:activated, true) user.update_attribute(:activated_at, Time.zone.now) на user.activate, но все равно появилась та же ошибка.

poponga 18.02.2019 11:45

@ 五十嵐伸雄 Поскольку вы создали метод authenticated? в пользовательской модели с одним параметром и отправляете два параметра, это и вызывает ошибку. когда я сказал удалить это, я имел в виду это изменение user.authenticated?(:activation, params[:id]) => user.authenticated?(:activation)

gouravtiwari21 18.02.2019 18:38

Другие вопросы по теме