我有一个Student
模型w / to_pdf
方法,它呈现由prawn gem生成的PDF。
class Student < ActiveRecord::Base
def to_pdf
StudentPdf.new(self.id).render
end
end
我如何在rspec中为此编写测试以确保此方法返回PDF?
答案 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
的详细信息
答案 1 :(得分:0)
尝试使用这些宝石pdf-reader或pdf-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