Rails 5.1 邮件编码错误

Rails 5.1 mailer encoding errors

我正在学习 Hartl Rails 教程 v5.0.1,但在(大概)需要指定编码的 Mailer 测试中卡住了。

相关的测试条款(我在每一行都得到类似的错误):

assert_match user.reset_token, mail.body.encoded
assert_match CGI.escape(user.email), mail.body.encoded

生成的错误消息(截断):

Failure:    
UserMailerTest#test_password_reset    
[...demo/test/mailers/user_mailer_test.rb:30]:    
Expected /6qyclXtvAeFin0htTK7t7g/ to match # encoding: US-ASCII

请注意,我在本地存储库中使用 Rails 5.1.1。邮件程序模板使用默认编码,无论它们是什么。

错误消息包含一长串电子邮件模板;我可以看到 "charset=UTF-8" 和 "Content-Transfer-Encoding: 7bit"。

MailerTest 文件还会检查用户令牌和 CGI​​ 转义电子邮件地址的相同组合,以解决帐户激活测试用例 w/o 问题。

有什么建议吗?到目前为止,Hartl 教程还没有深入探讨编码。

问题是 mail.body 必须是 String,但你还没有在 password_reset 中设置它。

所以,首先设置它:

def password_reset(user)
  @user = user
  @body = "My message body"

  mail to: user.email, subject: "password reset"
end

其次,在您的模板中使用它。

# password_reset.html.erb
<h1>User#password_reset</h1>
<%= @body %>

# password_reset.text.erb
User#password_reset
<%= @body %>

您会注意到 @greeting 已被删除,我这样做是因为它不再被使用(您将在 @body 中添加您的消息)。