我一直在为我的应用程序编写rspec + capybara测试并提出了一个问题 - 如何测试打印操作,因为我正在使用电子表格 gem 生成 pdf,然后可以下载。为了打印这个文件,我正在使用iframe?我知道,下载可以用
page.response_headers['Content-Disposition'].should include("filename=\"file.png\"")
但是有任何用于打印的 response_headers 吗?
谢谢
我一直在为我的应用程序编写rspec + capybara测试并提出了一个问题 - 如何测试打印操作,因为我正在使用电子表格 gem 生成 pdf,然后可以下载。为了打印这个文件,我正在使用iframe?我知道,下载可以用
page.response_headers['Content-Disposition'].should include("filename=\"file.png\"")
但是有任何用于打印的 response_headers 吗?
谢谢
我不认为打印是后端应该关注的事情,甚至是浏览器的渲染引擎。它只是浏览器通过自定义功能(如 Chrome)或默认操作系统打印面板(如 Safari)支持的东西。
这让我想到了下一个问题。你想测试什么?您想测试打印是否有效?对于您的 RSpec 测试,这似乎有点超出范围。您已经说过您测试了为用户创建 PDF 的功能,然后下载该 PDF。从那一刻起,该 PDF 发生的任何事情都超出了您的应用程序的范围,因此它不可测试,当然也不应该测试。
只要 PDF 功能有效,您就知道您的应用程序有效。从个人经验来看,接下来发生的事情完全是一个黑匣子,有些人不了解 PDF 是什么,而另一些人则不知道如何控制他们的打印机。因此,我不会专注于这个测试,而是专注于编写一些与您的 PDF 下载相关的文档。
更新
如果您使用该Window.print()
功能,您可以执行以下操作:
Window.print()
不返回任何值供您检查,但您可以将该函数包装在您自己的函数中并添加您自己的返回值。
当然,这只会测试包装函数是否被实际调用,而不是 print() 函数是否正确触发。但请放心,有更大的公司确保他们的打印功能在他们的浏览器中工作,所以就像你不应该测试基本的 Rails 方法一样validations
,你也应该跳过测试浏览器的东西,比如print()
和back()
。
您唯一可以检查的是,当用户禁用 javascript时,您是否提供了解决方案。