2013-07-14 2 views
0

У меня есть ruby script, который берет на себя цены на книги у пользователя во время выполнения. Я новичок в написании тестов RSpec для скриптов Ruby. Я использую Ruby 1.9.3-p327 и rspec 2.11.0. Вы можете клон мой проект от Githubthis link.Проблема с Rspec Тест для Ruby-скрипта, который вводит пользовательский ввод для элементов Hash

My Rspec Test предназначен для проверки того, принадлежит ли вновь созданный объект к определенному классу.

Мой тест проходит успешно, если я прокомментирую номер строки 32 в ruby script.

Как-то, когда я раскомментирую эту строку, я получаю ошибку ниже, которая связана с пользовательским вводом. Я даже не тестирую это как часть своего spec file, но все же я прихожу с этой ошибкой. Я точно не знаю, почему и как я мог решить эту проблему.

The Last Samurai: /home/mohnish/xxx/yyy/sample_pocs/book/book.rb:11:in `gets': Is a directory - spec (Errno::EISDIR) 
    from /home/mohnish/xxx/yyy/sample_pocs/book/book.rb:11:in `gets' 
    from /home/mohnish/xxx/yyy/sample_pocs/book/book.rb:11:in `block in get_prices' 
from /home/mohnish/xxx/yyy/sample_pocs/book/book.rb:9:in `each' 
    from /home/mohnish/xxx/yyy/sample_pocs/book/book.rb:9:in `inject' 
    from /home/mohnish/xxx/yyy/sample_pocs/book/book.rb:9:in `get_prices' 
from /home/mohnish/xxx/yyy/sample_pocs/book/book.rb:49:in `<top (required)>' 
    from /home/mohnish/xxx/yyy/sample_pocs/book/spec/spec_helper.rb:1:in `require_relative' 
    from /home/mohnish/xxx/yyy/sample_pocs/book/spec/spec_helper.rb:1:in `<top (required)>' 
from /home/mohnish/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from /home/mohnish/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from /home/mohnish/xxx/yyy/sample_pocs/book/spec/book_spec.rb:1:in `<top (required)>' 
from /home/mohnish/.rvm/gems/[email protected]_set/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `load' 
    from /home/mohnish/.rvm/gems/[email protected]_set/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `block in load_spec_files' 
    from /home/mohnish/.rvm/gems/[email protected]_set/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `map' 
from /home/mohnish/.rvm/gems/[email protected]_set/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `load_spec_files' 
    from /home/mohnish/.rvm/gems/[email protected]_set/gems/rspec-core-2.11.1/lib/rspec/core/command_line.rb:22:in `run' 
    from /home/mohnish/.rvm/gems/[email protected]_set/gems/rspec-core-2.11.1/lib/rspec/core/runner.rb:69:in `run' 
from /home/mohnish/.rvm/gems/[email protected]_set/gems/rspec-core-2.11.1/lib/rspec/core/runner.rb:8:in `block in autorun' 

Я также хочу проверить вход пользователя для этого примера. Было бы здорово, если бы вы могли пролить свет на то, как я мог получить то же самое. Я нашел несколько мест, где я могу начать с тестирования ввода пользователя, например, eg 1 и eg 2, но я в основном смотрю, как тестировать ввод пользователя для ряда элементов, принадлежащих хешу.

Спасибо.

ответ

0

Использование

STDIN.gets.chomp 

См this answer.

Лучший способ проверить это - высмеять IO#gets с объектом и методом, который возвращает законченный ответ. RSpec макет будет выглядеть примерно так:

STDIN.should_receive(:gets).and_return("A Book Title") 

См this answer еще пару примеров. Установите их в соответствующие блоки before :each, и они перехватят вызов до gets в вашем тесте.

+0

Спасибо, Шон. Это исправило ошибку. Вероятно, мне следовало бы уточнить мой поиск в «' gets »: есть каталог - spec». Я изучаю путь .. :). Любые входные данные о том, как я могу написать спецификацию для ввода пользователем элементов Hash? – boddhisattva

+0

Пользователь вводит некоторую строку, которая преобразуется в хэш, или метод ожидает реального хэша? –

+0

Пользовательский ввод представляет собой строку, и каждая такая строка сохраняется как значение для каждого ключевого элемента в Hash. – boddhisattva