Тестирование чистого приложения Ruby bin / my_app.rb с RSpec? - PullRequest
4 голосов
/ 31 августа 2011

У меня есть приложение командной строки (NON-RAILS), написанное на чистом Ruby, которое я использую через Cucumber и RSpec.Он следует типичной иерархии приложений каталогов lib, bin, spec и feature.

До сих пор я следовал традиционному процессу написания отказавшего объекта / сценария Cucumber, переходя к RSpec для выводавспомогательные файлы lib, а затем выполнение сценария.

К сожалению, это не так просто, когда выгоняете основную точку входа приложения в "bin / my_application.rb".Основная проблема для меня заключается в том, что я не описываю класс в RSpec, это последовательный скрипт на Ruby для управления классами приложения и инициализации с помощью параметров и параметров командной строки.

"bin / my_application.rb"просто небольшая оболочка, выполняемая оболочкой, для анализа параметров командной строки и передачи их в мой основной класс приложения в качестве параметров инициализатора.Я все еще хотел бы проверить поведение скрипта bin (например, MyApp.should_receive (option_a) .with (параметр)).

Есть предложения / мысли / советы?Это нормальная стратегия тестирования для вытеснения поведения сценария Ruby из командной строки?

Заранее спасибо.

1 Ответ

4 голосов
/ 02 сентября 2011

Не уверен, что я полностью понимаю, о чем вы спрашиваете, но я бы сказал, что если вы хотите использовать RSpec для проверки передачи параметров, это должно быть достаточно просто. Скажем, у вас есть скрипт-обёртка:

# my_application.rb
command = Command.new
command.foo = true if ARGV[0]
command.bar = true if ARGV[1]
command.baz = false if ARGV[2]

command.make_dollars(1000000)

Просто перемешайте и сделайте класс подходящим для тестирования.

# command_runner.rb
class CommandRunner
  def run(args, command = Command.new)
    command.foo = true if args[0]
    command.bar = true if args[1]
    command.baz = false if args[2]

    command.make_dollars(1000000)
  end
end

# my_application.rb
CommandRunner.new.run(ARGV)

Теперь единственное, что вы не протестировали, это ваш параметр по умолчанию для команды run и одна строка в файле my_application.rb

Надеюсь, это поможет. Brandon

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...