测试使用ActionMailer发送的PDF内容

时间:2014-02-28 16:23:04

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

我正在尝试测试pdf文档中的特定内容,该文档通过prawn gem生成并附加到ActionMailer电子邮件中。我正在使用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

本文持续很长时间。

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

1 个答案:

答案 0 :(得分:3)

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

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

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