尝试存根接受用户输入的get方法(RSpec)

时间:2011-09-18 23:17:04

标签: ruby rspec

我正在测试一个使用puts和gets来启动一个小脚本的初始化方法。

以下是代码:

def init  
  puts 'type xml file name'
  @xml_name = gets.chomp
  f = File.open(@xml_name)
  doc = Nokogiri::XML(f)
  f.close
  build_headers(doc)
end

这是测试代码:

describe XmlParser do

  describe "init" do
    before(:each) do
      stub!(:gets).and_return('')
      stub!(:puts)
    end

    it "should give a greeting message 'type xml file name'" do
      XmlParser.stub!(:build_headers).with(nil)
      should_receive(:puts).with('type xml file name')
      XmlParser::init
    end


  end
end

在init方法中调用gets时,它实际上会抛出一个错误。有没有办法简单地存根这些方法?或者我应该重构代码以使用已接受的STDOUT和STDIN,并简单地存根这些对象?

1 个答案:

答案 0 :(得分:2)

考虑哪个对象正在接收gets方法调用。您似乎直接在XmlParser上调用它,因为如果我正确理解您的self方法,那就是init

那么,这有用吗?

XmlParser.stub(:gets).and_return('')