2012-06-22 39 views
0

我一直在写rspec + capybara为我的应用程序进行测试,并提出了一个问题 - 如何测试打印操作,因为我使用电子表格gem生成pdf,然后可下载。为了打印这个文件我使用iframe?我知道,下载可以用测试打印动作

page.response_headers['Content-Disposition'].should include("filename=\"file.png\"") 

但是是否有任何打印的response_headers?

谢谢

回答

2

我不认为印刷的东西,后端要关心,甚至是浏览器为此事的渲染引擎。它只是通过浏览器或通过自定义功能(如Chrome)或默认操作系统打印面板(如Safari)支持的。

这给我带来了下一个问题。你想要测试什么?你想测试打印是否有效?这对您的RSpec测试来说似乎有点超出范围。您已经说过您测试了为用户创建PDF然后下载的函数。从那一刻起,无论发生什么PDF超出了您的应用程序的范围,所以它不是可测试的,并且绝对不应该被测试。

只要PDF功能起作用,您就知道您的应用程序有效。从个人经验来看,接下来发生的事情完全是一个黑匣子,有些人不了解PDF是什么,有些人不知道如何控制他们的打印机。所以我不会专注于这个测试,而是专注于编写一些随PDF下载一起提供的文档。

更新

这里的,如果你使用Window.print()功能,你可以做什么:

Window.print()不返回任何值,你检查的,但你可以换自己的函数内部的功能,并添加你自己的回报价值。

当然,这只会测试包装函数是否实际调用,但如果print()函数正确启动则不会。但请放心,有更大的公司确保他们的打印功能在他们的浏览器中正常运行,所以您不应该像测试validations那样测试基本的Rails方法,您也应该跳过测试浏览器的东西,如print()back()

您可以检查的唯一的事情是,当用户有JavaScript禁用时,您可以提供解决方案。

+0

基本上,我的意图是测试是否在我们的模板(不是PDF内)中按下“打印”按钮不会加载带有错误消息的另一个页面,并提供打印PDF的机会。哦,谢谢你的回应。 –

+0

我更新了我的答案,以澄清您在调用Window.print()时可能会做些什么。但即使如此,你可以测试的东西也是有限的。 – JeanMertz