如何测试具有重音日期的邮件程序?

时间:2012-07-19 12:11:10

标签: ruby-on-rails ruby-on-rails-3 actionmailer testunit

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

  

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 ........“。

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

1 个答案:

答案 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