我有两个问题。鉴于下面的Ruby代码,您的测试将在RSPEC中进行哪种测试?在运行测试时如何避免询问用户输入?我尝试了许多方法,例如:
- 允许($ stdout)
- 允许(内核)
- stub(:get)
- stdout.should_receive(:puts).with(" exit")
- 允许($ stdin)。接收(:get).and_return('no_gets')
- 允许_ANY_INSTANCE_OF(kernel)。
,但上述不行。在测试中一直要求我输入。
class EchoApp
def greeting
while(true)
puts "Say something:"
user = gets.chomp
break if user == 'exit'
end
return "Goodbye!"
end
end
您的建议实际上应该有效。但是还有另一个选择。
orig_stdin = $stdin
$stdin = StringIO.new('exit')
assert(EchoApp.new.greeting,'Goodbye!')
# Or
expect(EchoApp.new.greeting).to eql('Goodbye!')
$stdin = orig_stdin
让我知道这是否不起作用。