2

我有一个Student带有方法的模型,它呈现由gemto_pdf生成的 PDF 。

class Student < ActiveRecord::Base
  def to_pdf
    StudentPdf.new(self.id).render
  end
end

我将如何在 rspec 中为此编写测试以确保此方法返回 PDF?

4

3 回答 3

7

任何 PDF 文档都以特殊字节序列(称为幻字节或幻数)%PDF(十六进制表示法中的 25 50 44 46)开头来识别它们。

require 'prawn'
Prawn::Document.new.render[0,4]
# => "%PDF"

因此,如果您只想确定返回的字符串是 PDF 文档并且您不关心它的内容,您可以检查结果魔术字节,例如:

it "must be a PDF" do
  expect(Student.new.to_pdf[0,4]).to eq('%PDF')
end

有关此处此处的魔术字节的更多信息

于 2013-07-25T14:07:38.630 回答
0

我在这里使用评论中的 pdf-reader gem 和配方:http ://railscasts.com/episodes/153-pdfs-with-prawn-revised?view=comments

这是我的代码:需要“spec_helper”

describe Report::PerformanceReviewReportPdf do
  let(:user) { create(:user) }
  let(:reviews) { create(:reviews) }
  let(:pdf) { described_class.new(user, [reviews]) }

  it 'renders pdf correctly' do
    reader = PDF::Reader.new(StringIO.new(pdf.build))
    page   = Capybara.string(reader.pages.collect(&:text).join("\n"))

    page.should have_content('Something')
  end
end

Report::PerformanceReviewReportPdf < Prawn::Document
  def initialize
    ......
  end
  def build
    text 'Something'
    render
  end
end
于 2014-01-13T14:42:34.350 回答
0

尝试使用这些 gem pdf-readerpdf-inspector来检查渲染文件,就像在对虾测试中所做的那样。如果您只想检查文件的 mime 类型,请使用此 gem在测试中获取文件扩展名。

于 2013-07-25T13:41:23.033 回答