我正在尝试编写一些单元测试,其中涉及Roo http://roo.rubyforge.org/读取 Excel 2007 文件。我的单元测试文件中有一个十六进制字符串的 Excel 文件,该文件又被输入到 StringIO 实例中。我不能简单地将 StringIO 对象传递给Roo::Spreadsheet.open
,因为该函数实际上检查传递的对象是否是File
实例:
def open(file, options = {})
file = File === file ? file.path : file
# ...
如果不是,则继续假设它是一个字符串。手动指定扩展名没有帮助:
doc = Roo::Spreadsheet.open(file, extension: :xlsx)
有没有什么聪明的方法可以让 Roo 将 StringIO 实例用作文件?
看起来像这个版本 https://github.com/roo-rb/roo/roo 对此表示支持。它不是显式检查它是否是 File 类,而是根据它是否响应以鸭子类型风格检查它是否是流#seek
。相关代码是here https://github.com/roo-rb/roo/blob/1586ef279162f55a4e3b3e692d57b2b4ae4c8b34/lib/roo/excelx.rb#L98 and here https://github.com/roo-rb/roo/blob/1586ef279162f55a4e3b3e692d57b2b4ae4c8b34/lib/roo/base.rb#L446.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)