【问题标题】:Action mailer link check in rspecrspec 中的操作邮件程序链接检查
【发布时间】:2015-06-27 11:42:15
【问题描述】:

我在我的 rspec 测试中有这样的比较:

expect(new_mail.body.encoded).to match(url_for(controller:'some_controller',action:'some_action',some_param:some_param))

但它失败了,因为 ActionMailer 将 html 正文编码为如下内容:

   +<a href=3D"http://localhost:3000/some_controller/some_action/wgt1p468ersmkq=
   +gbvmfv5wgmifj13u894dfjrhc0hzczk71pcw3hrk5907iqfolc6onhxvik6apuuwgm1rng7ro=
   +rt8qih43thql3spyp5ajjdugy9jvx0xc5hvpi015z" style=3D"display: inline-block=
   +; background-color: #71B344; color: #FFF; border-radius: 4px; font-weight=
   +: bold; text-decoration: none; padding: 6px 12px; white-space: nowrap">
   +        Go to Your Account
   +      </a>

如何比较邮件正文中的预期链接和编码链接?

【问题讨论】:

    标签: ruby-on-rails rspec actionmailer


    【解决方案1】:

    您可以改用new_mail.body.to_s 来获取Guide to Rails Testing 中指示的非编码版本。

    您还可以使用 Capybara 对呈现的电子邮件(或 any html fragment)进行断言,如果您真的想确保链接在其中,这比仅使用字符串匹配要好:

    let(:email){ Capybara::Node::Simple.new(new_mail.body.to_s) }
    
    it "has a link" do
      url = url_for(controller:'some_controller',action:'some_action',some_param:some_param)
      expect(email).to have_link('A link', href: url)
    end
    

    添加:

    要从多部分电子邮件中获取正确的部分:

    def get_message_part(mail, content_type)
      mail.body.parts.find { |p| p.content_type.match content_type }.body.raw_source
    end
    
    let(:email) { Capybara::Node::Simple.new(get_message_part(new_mail, /html/)) }
    

    【讨论】:

    • new_mail.body.to_s 返回空字符串,邮件中有多个附件
    • 啊忘了那些讨厌的多部分电子邮件。
    • 添加了关于如何处理多部分电子邮件的说明
    猜你喜欢
    • 1970-01-01
    • 2020-11-23
    • 2015-10-23
    • 2017-07-12
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 2012-01-25
    相关资源
    最近更新 更多