【问题标题】:Test PDF content sent with ActionMailer测试使用 ActionMailer 发送的 PDF 内容
【发布时间】:2014-04-01 18:25:13
【问题描述】:

我正在尝试测试通过 prawn gem 生成并附加到 ActionMailer 电子邮件的 pdf 文档中的特定内容。我正在使用 RSpec 和 Capybara 进行测试。

我已经设法像这样测试文件名 expect(ActionMailer::Base.deliveries[0].filename).to eq("my_file.pdf")

我以为我在某处读过我必须像这样测试 pdf 本身,但它不起作用。 `expect(ActionMailer::Base.deliveries[0].body.encoded).to have_content(user.first_name)`

运行测试时,出现以下错误:

Failure/Error: expect(ActionMailer::Base.deliveries[0].body.encoded).to have_content(user.first_name)
       expected to find text "John" in "JVBERi0xLjQKJf////8KMSAwIG9iago8PCAvQ3JlYXRvciA8ZmVmZjAwNTAw MDcyMDA2MTAwNzcwMDZlPgovUHJvZHVjZXIgPGZlZmYwMDUwMDA3MjAwNjEw MDc3MDA2ZT4KPj4KZW5kb2JqCjIgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cK L1BhZ2VzIDMgMCBSCj4+CmVuZG9iagozIDAgb2JqCjw8IC9UeXBlIC9QYWdl cwovQ291bnQgMQovS2lkcyBbNSAwIFJdCj4+CmVuZG9iago0IDAgb2JqCjw8 IC9MZW5ndGggMzE2NAo+PgpzdHJlYW0KcQpxCi9UcjEgZ3MKMjA2LjAwMCA2 NTYuMDAwIDIwMC4wMDAgMTAwLjAwMCByZQpTClEKCnEKNDAwLjAwMCAwIDAg NTAuMDAwIDEwNi4wMDAgNzA2LjAwMCBjbQovSTEgRG8KUQpxCi9UcjEgZ3MK MjA2LjAwMCA2NTYuMDAwIDIwMC4wMDAgMTAwLjAwMCByZQpTClEKCkJUCjIx OC40ODI1NTg1OTM3NSA2NDIuODk2IFRkCi9GMS4wIDE4IFRmCls8NTQ+IDEx MC44Mzk4NDM3NSA8NjU2OTZjNmU2MTY4NmQ2NTYyNjU3Mzc0OGE3NDY5Njc3 NTZlNjc+XSBUSgpFVAoKCkJUCjM2IDYyMy4zMjk5OTk5OTk5OTk5IFRkCkVU CgoKQlQKMzYgNjAzLjc2Mzk5OTk5OTk5OTkgVGQKRVQKCgpCVAoyNDguODUy

这段文字持续了很长时间。

也许只有我一个人,但这对我来说并不完全是“可测试的”。有人知道这样做吗?谢谢!

【问题讨论】:

  • 您正试图在加密字符串中查找非加密字符串“John”。使用与字符串相同的过程来加密“John”,或者不要在测试环境中加密您的电子邮件。 (通过密码我的意思是编码)

标签: ruby-on-rails pdf rspec capybara actionmailer


【解决方案1】:

首先,您的 PDF 生成代码应该真的与您的邮件程序代码分开,并且应该有自己的测试与您的邮件程序测试分开。请先这样做。

一旦您分离了您的 PDF 生成代码和测试,您就可以生成您的 PDF 并使用 pdf-inspector gem 测试其内容,该 gem 由制作 Prawn 的同一个人进行了有益的维护。然后在您的邮件测试中,您可以使用something like this 简单地检查文件是否已附加。

附:电子邮件内容看起来乱码 (JVBERi0xLjQ...) 的原因是电子邮件附件(通常)是Base64 编码的。但是,即使您对其进行了解码,如果没有像 pdf-inspector 这样的库,您可能无法在 PDF 内容中搜索纯文本字符串,因为它可能已被压缩(我不知道 Prawn 是否默认这样做)。但实际上,您的 PDF 代码和测试以及您的电子邮件代码和测试应该是完全分开的。

【讨论】:

  • 太棒了,谢谢!我不知道他们制作了一个测试宝石。他们可能应该在他们的 prawm 文档中提到这一点。
  • FWIW 这是"ruby testing prawn output" 在 Google 上的第一个结果。不过,我同意他们应该在 Prawn README 中提及它。附言关于 PDF 压缩与附件编码,我稍微更改了答案。也许值得一看。
  • 哦,好吧,我做了一个类似的谷歌搜索,但没有找到任何东西。感谢您的精彩解释!
  • @Linus 使用 pdf-insepctor gem 是否成功?我一直在尝试使用它,但无法让它为我的一生工作。
  • @maahd 是的,我正在这样使用它:rendered_pdf = PdfClass.new(params).render text_analysis = PDF::Inspector::Text.analyze(rendered_pdf) expect(text_analysis.strings).to include("Some text")(使用版本“~>1.1”)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
  • 2012-12-26
  • 2015-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多