如何使用rspec存根获取两个用户输入的方法?有可能吗?
class Mirror
def echo
arr = []
print "enter something: "
arr[0] = gets.chomp
print "enter something: "
arr[1] = gets.chomp
return arr
end
end
describe Mirror do
it "should echo" do
@mirror = Mirror.new
@mirror.stub!(:gets){ "foo\n" }
@mirror.stub!(:gets){ "bar\n" }
arr = @mirror.echo
#@mirror.should_receive(:puts).with("phrase")
arr.should eql ["foo", "bar"]
end
end
使用这些规范,@ mirror.echo的返回是[“bar”,“bar”],这意味着第一个存根被覆盖或被忽略。
我也尝试过使用@ mirror.stub!(:gets){“foo \ nbar \ n”}和@ mirror.echo返回[“foo \ nbar \ n”,“foo \ nbar \ n”] < / p>
答案 0 :(得分:6)
每次调用方法时,都可以使用and_return方法返回不同的值。
@mirror.stub!(:gets).and_return("foo\n", "bar\n")
你的代码看起来像这样
it "should echo" do
@mirror = Mirror.new
@mirror.stub!(:gets).and_return("foo\n", "bar\n")
@mirror.echo.should eql ["foo", "bar"]
end
使用and_return
counter.stub(:count).and_return(1,2,3)
counter.count # => 1
counter.count # => 2
counter.count # => 3
counter.count # => 3
counter.count # => 3