У меня есть блок кода, который создает TempFilesПроблемы с тестированием TempFile рубина
@tmp_file = Tempfile.new("filename")
Я держать их закрытыми после создания,
@tmp_file.close unless @tmp_file.closed?
Когда есть необходимость, чтобы добавить данные в темп файлы открыть их и добавить данные, как показано ниже
def add_row_to_file(row)
@tmp_file.open
@tmp_file.read
@tmp_file.print(row.to_json + "\n")
end
Все это хорошо, но для тестирования такой же я загасил, как временный файл Белу ш и создает ошибку, когда тест запускается в add_row_to_file(row)
buffers = {}
Tempfile.stub(:new) do |file_name|
buffer = StringIO.new
buffers[file_name] = buffer
end
сообщение об ошибке:
Failure/Error: ]],
NoMethodError:
private method `open' called for #<StringIO:0x00000010b867c0>
Я хочу, чтобы держать временные файлы закрыты по созданию как есть максимум временных файлов открытый вопрос на уровне ОС (мне приходится иметь дело с загрузкой партии tempfiles на S3) , но для тестирования у меня есть проблема с доступом к частному методу StringIO.
Любая идея, как решить эту проблему? Благодарю.
У меня есть работа, которая должна пропустить закрытие StringIO в тестовой среде.
@tmp_file.close unless @tmp_file.closed? || Rails.env.test?
и обновить add_row_to_file(row)
ниже
def add_row_to_file(row)
@tmp_file.open unless Rails.env.test?
@tmp_file.read unless Rails.env.test?
@tmp_file.print(row.to_json + "\n")
end
Почему вы не закрываете 'Tempfile # open'? – mudasobwa
У сильного не существует метода 'open' (так что вы на самом деле вызываете ядро # open) –
Я согласен с @mudasobwa. Не закрывайте 'new' и не проверяйте поведение файла чтения, это не ваш случай. Проверьте, что важно здесь, с точки зрения вашего приложения. Если вам нужны некоторые входные данные, подделайте их в своем тесте. – blelump