Ruby on rails 命令行程序Ruby/RSpec的特性测试

Ruby on rails 命令行程序Ruby/RSpec的特性测试,ruby-on-rails,ruby,ruby-on-rails-3,rspec,Ruby On Rails,Ruby,Ruby On Rails 3,Rspec,我有一个脚本,我想在一些测试中使用RSpec运行,我想在它上面测试输入/输出 比如说, 我有一个脚本'script.rb',我使用'ruby script.rb'运行它 然后脚本输出到STDOUT并使用STDIN获取输入。我想用RSPec来测试这一点,并检查一切是否正常工作(功能测试)。我该怎么做呢?只需在RSPec中执行一个“ruby script.rb”,然后测试输出是否符合我的预期,它是否接受STDIN的输入?因为您希望将脚本作为一个黑盒(仅STDIN/STDOUT)进行测试,您可以通过s

我有一个脚本,我想在一些测试中使用RSpec运行,我想在它上面测试输入/输出

比如说,

我有一个脚本'script.rb',我使用'ruby script.rb'运行它


然后脚本输出到STDOUT并使用STDIN获取输入。我想用RSPec来测试这一点,并检查一切是否正常工作(功能测试)。我该怎么做呢?只需在RSPec中执行一个“ruby script.rb”,然后测试输出是否符合我的预期,它是否接受STDIN的输入?

因为您希望将脚本作为一个黑盒(仅STDIN/STDOUT)进行测试,您可以通过
system()
调用完美地完成此操作:只需确保清除脚本留下的所有副作用(例如,临时文件)

编辑:只需创建一些包含所需内容的文件,比如
stdin.txt

之后,您可以通过以下方式运行命令:

system('cat stdin.txt | ruby myscript.rb')

由于您希望将脚本作为一个黑匣子(仅STDIN/STDOUT)进行测试,因此可以通过
system()
call完美地进行测试:只需确保清除脚本留下的所有副作用(例如,临时文件)

编辑:只需创建一些包含所需内容的文件,比如
stdin.txt

之后,您可以通过以下方式运行命令:

system('cat stdin.txt | ruby myscript.rb')

好的,有没有一种方法可以伪造stdin来获取对脚本的调用,这样我就不必让测试人员手动输入东西了?类似于capybara中用于web请求
系统的fill_in方法(“printf'y\ny\n'。/script”)
ok,有没有办法伪造stdin以获取对脚本的调用,这样我就不必让测试人员手动输入东西了?类似于capybara中用于web请求的fill_in方法
system(“printf'y\ny\n'./script”)