在我的邮件中,我有一个西班牙语格式的日期:
sábado,21 de julio del 2012
我在config / locales / es.yml
中配置了自定义格式化程序my_date_format: ! '%A, %-d de %B del %Y, %k:%M'
我正试图以这种方式进行测试:
test "date with accent" do
mail = MyMailer.my_template
assert_match I18n.l(@object.date, format: :my_date_format), mail.body.encoded
end
但它失败了:
#Running测试:
˚F
完成测试0.438078s,2.2827测试/秒,15.9789断言/ s。
1)失败:test_date_with_accent(MyMailerTest) [test / unit / mailers / my_mailer_test.rb:12]:预期/sábado,\ 21 \ de \ julio \ del \ 2012,\ 14:10 /匹配“...... ....... s = C3 = A1bado,21 de julio del 2012,14:10 \ r \ n ........“。
(我已经省略了其余的电子邮件内容)
答案 0 :(得分:1)
由于编码体是“引用可打印的”,让我们对测试日期进行编码。
首先,我们为String创建一个自定义方法:
class String
def to_quoted_printable(*args)
[self].pack("M").gsub(/\=\n/, "")
end
end
这可以放在test_helper.rb
中接下来我们只使用该自定义方法来准备日期值,因此可以进行匹配:
assert_match I18n.l(@object.date, format: :my_date_format).to_quoted_printable, mail.body.encoded
现在日期已正确编码,测试将通过。
甚至更简单,没有必要对电子邮件正文进行编码,因此也可以这样做:
assert_match I18n.l(@object.date, format: :my_date_format), mail.text_part.body.to_s