Ruby on Rails中的StringIO
是什么?
我正在尝试理解引用StringIO
的另一个SO答案,但它超出了我的想法。
我建议使用StringIO来确保你的SUT 接受要写入的流而不是文件名。
testIO = StringIO.new
sutObject.writeStuffTo testIO
testIO.string.should == "Hello, world!"
来源:Rspec: how to test file operations and file content
Ruby-doc.org
String对象上的伪I / O.
资料来源:http://ruby-doc.org/stdlib-1.9.3/libdoc/stringio/rdoc/StringIO.html)
Robots.thoughtbot
这在我们可能注入StringIO而不是注入的测试中很常见 从磁盘读取实际文件。
来源:https://robots.thoughtbot.com/io-in-ruby#stringio
我的情况:
File.open("data.dat", "wb") {|f| f.write(snapshot)}
在我的应用程序中,我想测试上面的内容,但我仍然对StringIO
如何应用于实现RSpec测试感到困惑。
任何有StringIO
经验的人都能提供一些指导吗?
答案 0 :(得分:2)
StringIO是IO对象的基于字符串的替换。它与文件的作用相同,但它作为字符串保存在内存中。
在你的情况下,我认为它并不适用。至少不是你当前的代码。这是因为你有File.open
调用创建一个IO对象并立即对它做了一些事情。
例如,如果你有这样的事情:
def write_data(f)
f.write(snapshot)
end
# your code would be
f = File.open("data.dat", "wb")
write_data(f)
# test would be
testIO = StringIO.new
write_data(testIO)
testIO.string.should == "Hello, world!"