Как запустить программу через Ruby и получить доступ к ее стандартному вводу и выводу - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть совершенно отдельный файл Ruby, который читает из стандартного ввода и записывает в стандартный вывод.

У меня есть определенные тестовые случаи, которые я хочу попробовать.Как передать свои входные данные в стандартный ввод в файл, а затем проверить стандартный вывод на ожидаемые результаты?


В качестве примера, вот материал, который я уже выяснил:

Существует файл, который читает число из стандартного ввода, возводит его в квадрат и записывает его в стандартный ввод

square.rb:

#!/usr/local/bin/ruby -w

input = STDIN.read

# square it
puts input.to_i ** 2

Завершите pass_input_to_file метод test.rb:

require 'minitest/autorun'

def pass_input_to_file(input)
  # complete code here
end

class Test < Minitest::Test
  def test_file
    assert_equal pass_input_to_file(2), 4
  end
end

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Вы можете использовать Ruby Open3 Library для отправки STDIN при вызове сценария ruby.

require 'open3'

def pass_input_to_file(input)
  output, _status = Open3.capture2('path_to_script', :stdin_data => input)
  output
end
0 голосов
/ 17 сентября 2018

Самый простой способ проверить это, вероятно, состоит в том, чтобы ваша программа посмотрела, были ли переданы какие-либо аргументы в первую очередь.Примерно так:

#!/usr/local/bin/ruby -w

input = ARGV[0] || STDIN.read

# square it
puts input.to_i ** 2

, а затем вы можете раскошелиться, чтобы проверить это:

def pass_input_to_file(input)
  `path/to/file #{input}`.to_i
end

В противном случае, я бы достиг чего-то вроде , ожидал для автоматизацииsubshell.


Кроме того, для более сложных программ использование OptionParser или гема CLI, вероятно, лучше, чем прямой просмотр ARGV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...