我正在开发一个 Rails 3.2 应用程序,用户可以使用它下载 pdf。我非常喜欢使用 rspec 和 shoulda 匹配器进行测试驱动开发,但我对这个感到茫然。
我的控制器中有以下代码:
def show_as_pdf
@client = Client.find(params[:client_id])
@invoice = @client.invoices.find(params[:id])
PDFKit.configure do |config|
config.default_options = {
:footer_font_size => "6",
:encoding => "UTF-8",
:margin_top=>"1in",
:margin_right=>"1in",
:margin_bottom=>"1in",
:margin_left=>"1in"
}
end
pdf = PDFKit.new(render_to_string "invoices/pdf", layout: false)
invoice_stylesheet_path = File.expand_path(File.dirname(__FILE__) + "/../assets/stylesheets/pdfs/invoices.css.scss")
bootstrap_path = File.expand_path(File.dirname(__FILE__) + "../../../vendor/assets/stylesheets/bootstrap.min.css")
pdf.stylesheets << invoice_stylesheet_path
pdf.stylesheets << bootstrap_path
send_data pdf.to_pdf, filename: "#{@invoice.created_at.strftime("%Y-%m-%d")}_#{@client.name.gsub(" ", "_")}_#{@client.company.gsub(" ", "_")}_#{@invoice.number.gsub(" ", "_")}", type: "application/pdf"
return true
end
这是相当简单的代码,它所做的只是配置我的 PDFKit 并下载生成的 pdf。现在我想测试整个事情,包括:
- 实例变量的赋值(当然很简单,而且很有效)
- 数据的发送,即 pdf 的渲染 => 这就是我卡住的地方
我尝试了以下方法:
controller.should_receive(:send_data)
但这给了我
Failure/Error: controller.should_receive(:send_data)
(#<InvoicesController:0x007fd96fa3e580>).send_data(any args)
expected: 1 time
received: 0 times
有谁知道测试pdf是否实际下载/发送的方法?此外,您还看到哪些内容需要测试以获得良好的测试覆盖率?例如,测试数据类型,即应用程序/pdf,会很好。
谢谢!