2017-06-02 73 views
0

我正在关注Hartl Rails教程,v5.0.1,并在Mailer测试中发现它(大概)需要指定的编码。Rails 5.1邮件编码错误

相关的测试条款(我得到任何行类似的错误):

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转义的电子邮件地址相同的组合用于帐户激活测试用例不存在问题。

有什么建议吗?至此,Hartl教程还没有深入研究编码。

+0

请分享您正在测试的邮件程序文件(我假设它是'user_mailer.rb')及其模板(例如'some_mail.html.erb'和'some_mail.txt.erb')。 – Gerry

+0

https://pastebin.com/67GS6Rwg –

+0

它更好地编辑你的问题,并在那里添加代码,而不是提供一个外部链接。 – Gerry

回答

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添加您的留言)。

+0

完成。谢谢! –