Rails教程ch。 10测试10.20失败

时间:2015-02-19 19:15:05

标签: ruby-on-rails ruby railstutorial.org

我在Rails教程中遇到测试10.20的问题。 使用命令后:

  

捆绑exec rake测试:邮件程序

我收到了错误:

Run options: --seed 6131

# Running:

F

Finished in 0.559132s, 1.7885 runs/s, 5.3655 assertions/s.

  1) Failure:
UserMailerTest#test_account_activation [/home/adam/workspace/sample_app    /test/mailers/user_mailer_test.rb:11]:
Expected: ["noreply@example.com"]
Actual: nil

1 runs, 3 assertions, 1 failures, 0 errors, 0 skips

我已经彻底检查了我的代码并且找不到不当行为,但我显然做错了。

这是我的user_mailer:

class UserMailer < ActionMailer::Base

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

  def password_reset
    @greeting = "Hi"

    mail to: "to@example.org"
  end
end

user_mailer_test:

require 'test_helper'

class UserMailerTest < ActionMailer::TestCase

  test "account_activation" do
    user = users(:michael)
    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
end

我已将此行添加到config / environments / test.rb:

config.action_mailer.default_url_options = { host: 'example.com' }

我可以提供一些建议吗?

3 个答案:

答案 0 :(得分:2)

对用户邮件程序的所有引用都应以

开头
class UserMailer < ApplicationMailer

这是由于Rails 4.2最近的变化。上周我更新了教程后,我错过了几个参考文献,但现在已经纠正了这些内容。请确保您还包含应用邮件程序,如Listing 10.8所示。实际上,删除邮件程序并从头开始重新生成它们可能是个好主意,以确保您的代码符合Rails 4.2所期望的结构。

答案 1 :(得分:1)

您需要将:from添加到此行

mail to: user.email, subject: "Account activation"
像这样

mail to: user.email, from: "noreply@example.com", subject: "Account activation"

答案 2 :(得分:1)

只需编辑 user_mailer.rb 文件:

class UserMailer < ActionMailer::Base

到此:

class UserMailer < ApplicationMailer

原因是default from:地址位于 application_mailer.rb 文件中, it 来自ActionMailer::Base