Попытка заглушить метод gets для принятия пользовательского ввода (RSpec) - PullRequest
0 голосов
/ 19 сентября 2011

Я тестирую метод инициализации, который использует как put, так и get для запуска небольшого скрипта.

Вот код:

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

По сути, выдает ошибку, когда get вызывается в методе init. Есть ли способ просто заглушить эти методы? Или я должен рефакторинг кода, чтобы использовать принятые STDOUT и STDIN, и просто заглушить эти объекты?

1 Ответ

2 голосов
/ 19 сентября 2011

Подумайте, какой объект получает этот gets вызов метода.Похоже, вы вызываете его непосредственно на XmlParser, поскольку self было бы таким, если бы я правильно понял ваш init метод.

Итак, это работает?

XmlParser.stub(:gets).and_return('')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...