2013-03-24 2 views
4

rspec을 사용하여 두 개의 사용자 입력을받는 메소드를 어떻게 스터브로 작성합니까? 가능한가? @ mirror.echo의 반환은 제 스터브 덮어되거나 무시 의미 [ "바", "바"] 이들 사양과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.stub! (: gets) { "foo \ nbar \ n"}를 사용하고 @ mirror.echo는 [ "foo \ nbar \ n", "foo \ nbar \ n"]를 반환합니다.

답변

6

메서드를 사용하면 메서드가 호출 될 때마다 다른 값을 반환 할 수 있습니다.

@mirror.stub!(:gets).and_return("foo\n", "bar\n") 

그리고 당신의 코드는 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 
를 사용하여이

it "should echo" do 
    @mirror = Mirror.new 
    @mirror.stub!(:gets).and_return("foo\n", "bar\n") 
    @mirror.echo.should eql ["foo", "bar"] 
end 

예 같을 것이다