我有一个代码段,当我使用gets从exit
收到STDIN
输入时,我将终止该程序。我如何编写相同的rspec测试用例。
以下是代码段。
class CommandProcessor
attr_accessor :input
attr_accessor :operation
def parser
while true
input = gets.chomp
operation = input.split(' ')[0]
param = input.split(' ')[1]
if operation.eql? 'exit'
exit
end
end
end
end
以下是我的尝试。
describe "CommandProcessor" do
it "will exit on input exit" do
cmd = CommandProcessor.new
cmd.parser
expect { it_will_exit }.raise_exception(SystemExit)
end
end
更新
之前我尝试了Leonid Mirsky的方法并得到了这个错误:
lib/calculator.rb:37:in `parser': undefined method `chomp' for nil:NilClass (NoMethodError)
答案 0 :(得分:1)
您可以在cmd对象本身上存根gets
方法。
使用以下规范代码:
describe "CommandProcessor" do
it "will exit on input exit" do
cmd = CommandProcessor.new
cmd.stub(:gets) {"exit\n"}
expect { cmd.parser }.to raise_error SystemExit
end
end