rspec - 如何使用多个用户输入存根方法?

时间:2013-03-24 22:40:49

标签: ruby rspec stub

如何使用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>

1 个答案:

答案 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