Проблема с тестом Rspec для скрипта Ruby, который принимает ввод данных пользователем для элементов хэша

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

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

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

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

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/ruby-1.9.3-p327@book_set/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `load'
    from /home/mohnish/.rvm/gems/ruby-1.9.3-p327@book_set/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `block in load_spec_files'
    from /home/mohnish/.rvm/gems/ruby-1.9.3-p327@book_set/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `map'
from /home/mohnish/.rvm/gems/ruby-1.9.3-p327@book_set/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `load_spec_files'
    from /home/mohnish/.rvm/gems/ruby-1.9.3-p327@book_set/gems/rspec-core-2.11.1/lib/rspec/core/command_line.rb:22:in `run'
    from /home/mohnish/.rvm/gems/ruby-1.9.3-p327@book_set/gems/rspec-core-2.11.1/lib/rspec/core/runner.rb:69:in `run'
from /home/mohnish/.rvm/gems/ruby-1.9.3-p327@book_set/gems/rspec-core-2.11.1/lib/rspec/core/runner.rb:8:in `block in autorun'

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

Спасибо.


person boddhisattva    schedule 14.07.2013    source источник


Ответы (1)


Использовать

STDIN.gets.chomp

См. этот ответ.

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

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

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

person Sean Redmond    schedule 14.07.2013
comment
Спасибо, Шон. Это исправило ошибку. Мне, вероятно, следовало бы уточнить свой поиск, указав «получает»: это каталог - спецификация. Учусь пути .. :). Какие-либо данные о том, как я могу написать спецификацию для пользовательского ввода элементов Hash? - person boddhisattva; 14.07.2013
comment
Пользователь вводит некоторую строку, которая преобразуется в хэш, или метод ожидает фактического хеширования? - person Sean Redmond; 14.07.2013
comment
Пользовательский ввод представляет собой строку, и каждая такая строка сохраняется как значение для каждого ключевого элемента в хэше. - person boddhisattva; 14.07.2013
comment
Я принимаю ваш ответ, поскольку он в основном помог мне решить проблему с получением. Спасибо. - person boddhisattva; 21.07.2013