代码之家  ›  专栏  ›  技术社区  ›  user3250752

Rails教程(M.Hartl)-我收到两个错误,需要帮助

  •  -1
  • user3250752  · 技术社区  · 9 年前

    我的RubyonRails应用程序中有2个错误。我正在尝试完成Rails教程中的示例应用程序。

    以下是我的错误:

    1) Error:
    UserMailerTest#test_account_activation:
    ArgumentError: wrong number of arguments (1 for 0)    app/mailers/user_mailer.rb:3:in `account_activation'     test/mailers/user_mailer_test.rb:9:in `block in <class:UserMailerTest>'
    
    2) Failure:
    UserMailerTest#test_password_reset [/home/andy/Ruby_Projects/sam
    ple_app/test/mailers/user_mailer_test.rb:21]: Expected: ["from@example.com"] Actual: ["noreply@example.com"]
    

    这是我针对这两个问题的代码:

    require 'test_helper'
    
    class UserMailerTest < ActionMailer::TestCase
    
      test "account_activation" do
        user = users(:andy)
        user.activation_token = User.new_token
        mail = UserMailer.account_activation(user)
        assert_equal "Account activation", mail.subject
        assert_equal [user.email], mail.to
        assert_equal ["noreply@example.com"], mail.from
        assert_match user.name,               mail.body.encoded
        assert_match user.activation_token,   mail.body.encoded
        assert_match CGI::escape(user.email), mail.body.encoded
      end
    
      test "password_reset" do
        mail = UserMailer.password_reset
        assert_equal "Password reset", mail.subject
        assert_equal ["to@example.org"], mail.to
        assert_equal ["from@example.com"], mail.from
        assert_match "Hi", mail.body.encoded
      end
    end
    

    这是UserMailer.rb:

    class UserMailer < ApplicationMailer
    
      def account_activation
        user = user
        mail to: user.email, subject: "Account activation"
      end
    
      def password_reset
        @greeting = "Hi"
        mail to: "to@example.org"
      end
    end
    

    我一直在遵循教程,用教程中的内容检查我的代码,但仍然无法发现我做错了什么。如果你需要更多信息,请告诉我。我会尽力提供。

    1 回复  |  直到 9 年前
        1
  •  0
  •   infused    9 年前

    您没有定义 account_activation 方法您需要添加 user 参数:

    def account_activation(user)
      @user = user
      mail to: user.email, subject: "Account activation"
    end