1

在我的邮件中,我有一个西班牙语格式的日期:

萨巴多,2012 年 7 月 21 日

我在我的 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

但它失败了:

# 运行测试:

F

在 0.438078 秒、2.2827 次测试/秒、15.9789 次断言/秒内完成测试。

1) 失败:test_date_with_accent(MyMailerTest) [test/unit/mailers/my_mailer_test.rb:12]: Expected /sábado,\ 21\ de\ julio\ del\ 2012,\ 14:10/ to match "..... . ........s=C3=A1bado,2012 年 7 月 21 日,14:10\r\n ........"。

(我省略了其余的电子邮件内容)

4

1 回答 1

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
于 2012-07-19T14:26:17.767 回答