2012-02-29 6 views
5

Следующий сценарий довольно много суммирует мою проблему:Тестирование приложений командной строки с огурца/Арубе/TimeCop: Как придать контексте

Scenario: problems with subprocesses 
    Given the date is 01/01/2012 10:31 
    When I run `ruby -e "puts Time.now"` 
    Then the output should contain "10:31" 

Она сводится к When I run ruby -e "puts Time.now" запуска дочернего процесса и, таким образом, делая все мои Timecop.freeze заглушки неэффективны, так как они работают только на основном процессе. Мне нужно как-то «ввести» текущий контекст в исполняемую команду, но, похоже, я ничего не могу придумать. Я пытаюсь сделать что-то невозможное здесь?


Стадию:

require 'timecop' 
Given /^the date is (\d+)\/(\d+)\/(\d+) (\d+):(\d+)$/ do |month, day, year, hour, minute| 
    Timecop.freeze(Time.local(year.to_i, month.to_i, day.to_i, hour.to_i , minute.to_i, 0)) 
end 

ответ

1

Я вижу 2 варианта здесь.

  1. Создайте крюк в испытываемой системе, которые вы можете использовать, чтобы придать нужный контекст, в данном примере, можно добавить параметр «текущее время» в приложение командной строки, что вы тестируете. В качестве альтернативы укажите фиксированное время в файле конфигурации приложений или базе данных, есть много вариантов. Это предполагает, что у вас есть приложение, которое вы тестируете, и можете вносить такие изменения. Это может быть только очень небольшое изменение, например. если задан параметр «Текущее время», используйте Timecop, чтобы заморозить время в это время.

  2. Найдите способ проверки системы в процессе огурца. В вашем примере вместо обхода до ruby -e "puts Time.now" вы могли бы instance_eval "puts Time.now". Более реалистично, вы могли бы require приложение, и если бегун из командной строки - это просто тонкая оболочка вокруг некоторых классов, которые фактически выполняют эту работу, вы можете напрямую их вызвать. Кроме того, вы можете заполнить все параметры ARGV, выкрой из метода puts и всего лишь require файл, который должен дать вам опыт работы с ним, но вы сможете эффективно использовать Timecop ,

Смежные вопросы