首页 > 解决方案 > Rails 教程上的 Rails 测试,ArgumentError

问题描述

我目前正在学习 Ruby on Rails on Rails 教程。当我做rails测试时,我遇到了这个错误。

日志

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: "user@example.com",
                                         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

你能给我建议来解决这个问题吗?

标签: ruby-on-rails

解决方案


看起来您在第二行中为authenticated?方法提供了附加参数。app/controllers/account_activations_controller.rb#edit

删除它,这应该可以工作。


推荐阅读