我正在关注Hartl Rails教程v5.0.1并且遇到了一个Mailer测试(大概)需要一个指定的编码。
相关的测试条款(我在任何一行都有类似的错误):
assert_match user.reset_token, mail.body.encoded
assert_match CGI.escape(user.email), mail.body.encoded
产生的错误消息msg(截断):
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转义电子邮件地址的相同组合,以查找没有问题的帐户激活测试用例。
有什么建议吗?到目前为止,Hartl教程尚未深入研究编码。
答案 0 :(得分:0)
问题是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
中添加您的消息)。