Tag: stdin

如何使用rspec测试CLI的stdin

我正在制作一个小型的Ruby程序,无法弄清楚如何编写模拟多个用户命令行输入的RSpec规范(function本身可行)。 我认为这个StackOverflow的答案可能涵盖了最接近我的地方,但这并不是我需要的。 我使用Thor作为命令行界面,但我不认为这是Thor的任何问题。 程序可以从文件或命令行读取命令,并且我已经能够成功编写测试以读取执行它们。 这是一些代码: cli.rb class CLI ” while line = gets break if line =~ /EXIT/i yield [line] print “> ” end end end # .. end 我已经成功测试了使用以下代码执行文件中包含的命令: 投机/ cli_spec.rb describe CLI do let(:cli) { CLI.new } subject { cli } describe “executing instructions from a file” do let(:default_file) { “instructions.txt” } let(:output) […]

在处理完输入后,如何在不退出的情况下将STDin传递给IRB?

我正在使用一个简短的bash脚本来帮助我测试ruby中的链表的实现。 我知道rspec和unit testing,我确信它们是我正在尝试做的更好的选择,但我能够找出这个命令 echo “require ‘./nodes'” | irb 之后的输出是 Switch to inspect mode. require ‘./nodes’ true 从技术上讲,这是成功的,但是irb流程在那里结束。 所以我试过了 echo “require ‘./nodes'” | irb –noinspect 哪个给了我 Switch to non inspect mode. require ‘./nodes’ true 它再次退出irb过程。 我只是想让我的工作流程更方便一些,因为我喜欢使用irb来测试我的文件,看看它们发生了什么。

如果没有arg,则运行stdin的脚本; 否则输入文件= ARGV

这很好用 – 只是想知道是否有任何改进来缩短它? if (ARGV[0].nil?) then input=$< else input=File.new(ARGV[0],"r"); end … # Do something with the input here, for example: input.each_line do |line| puts line end

在Ruby中测试STDIN

我目前正在尝试测试一个基本方法,它接收来自用户的一些输入(获取)并输出它(puts)。 经过一番研究后,我找到了测试标准输出流的好方法,如下所示: def capture_standard_output(&block) original_stream = $stdout $stdout = mock = StringIO.new yield mock.string.chomp ensure $stdout = original_stream end 我正在测试的方法是下面的一个,输出和输入是指我在开头初始化并指向等效的$ stdout&$ stdin的ivars: def ask_for_mark ouput.puts ‘What shall I call you today?’ answer = input.gets.chomp.capitalize answer end 现在我已经看到了STDIN的一些解决方案,但还没有真正了解它们中的任何一个,我绝对不想复制和粘贴。 我唯一能够“工作”的是下面的那个,但它并没有真正起作用,因为当我运行rspec它暂停并等待输入时,只需按Enter键,它就会通过: it “takes user’s name and returns it” do output = capture_standard_output { game.ask_for_name } expect(output).to eq “What […]

我可以使用RSpec来模拟stdin / stdout来测试控制台的读写吗?

我的Ruby程序从stdin读取行并使用puts打印到stdout (终端)。 我可以使用RSpec来测试读写吗? 我可以将一个字符串注入我的程序,就像它是用stdin编写的那样,同时检查输出吗? line = STDIN.read.chomp.split 此外,我在循环中进行读写,直到line[0] “退出”。 我可以在循环运行时进行测试,还是应该调用subject.read_in和subject.write_out ?

ARGV在Ruby中有什么意义?

ARGV在Ruby中有什么意义? first, second, third = ARGV puts “The script is called: #{$0}” puts “Your first variable is: #{first}” puts “Your second variable is: #{second}” puts “Your third variable is: #{third}” 运行我需要做的文件时,重点是什么: ruby ex1.rb 并输入我需要输入的第一,第二和第三个变量 ruby ex1.rb blah blah blah 这对所有运行该程序的人有何益处? 他们无论如何都做不到,因为我认为它是一个可执行文件: user = ARGV.first prompt = ‘> ‘ puts “Hi #{user}, I’m the #{$0} script.” […]