Что такое `StringIO` в контексте тестирования RSpec (Ruby on Rails)?

Что такое StringIO в Ruby on Rails?

Я пытаюсь понять еще один ответ, что ссылки StringIO, но это над моей головой.

Я бы предложил использовать для этого StringIO и убедиться, что ваше SUT принимает поток для записи вместо имени файла.

testIO = StringIO.new
sutObject.writeStuffTo testIO 
testIO.string.should == "Hello, world!"

Источник: Rspec: как проверить файловые операции и содержимое файла

Ruby-doc.org

Псевдо ввод / вывод на объекте String.

Источник: http://ruby-doc.org/stdlib-1.9.3/libdoc/stringio/rdoc/StringIO.html)

Robots.thoughtbot

Это часто встречается в тестах, где мы можем ввести StringIO вместо чтения реального файла с диска.

Источник: https://robots.thoughtbot.com/io-in-ruby

Мое дело:

File.open("data.dat", "wb") {|f| f.write(snapshot)}

В моем приложении я хочу проверить выше, но я все еще не понимаю, как StringIO применяется для реализации теста RSpec.

Может ли кто-нибудь с некоторым опытом в StringIO дать какое-нибудь руководство?

1 ответ

Решение

StringIO - это строковая замена для объекта ввода-вывода. Он действует так же, как файл, но хранится в памяти как строка.

В твоем случае я не думаю, что это действительно применимо. По крайней мере, не с вашим текущим кодом. Это потому что у вас есть File.open вызов, который создает объект ввода-вывода и немедленно что-то делает с ним.

Если, например, у вас было что-то вроде этого:

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!"
Другие вопросы по тегам