2017-06-02 75 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

完成。謝謝! –