【问题标题】:What is `StringIO` in the context of RSpec testing (Ruby on Rails)?在 RSpec 测试(Ruby on Rails)的上下文中,什么是`StringIO`?
【发布时间】:2016-05-30 12:47:22
【问题描述】:

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

字符串对象上的伪 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 有一些经验的人可以提供一些指导吗?

【问题讨论】:

    标签: ruby-on-rails rspec stringio


    【解决方案1】:

    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!"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      • 2020-09-20
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多