测试方法使用Rspec返回PDF数据

时间:2013-07-25 13:10:59

标签: ruby-on-rails ruby testing rspec

我有一个Student模型w / to_pdf方法,它呈现由prawn gem生成的PDF。

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

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

3 个答案:

答案 0 :(得分:6)

任何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

有关魔术字节herehere

的详细信息

答案 1 :(得分:0)

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

答案 2 :(得分: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