Передача аргументов из Rake в сценарий с огурцом - PullRequest
0 голосов
/ 21 октября 2011

Одна из моих задач Rake вызывает Cucumber с Rake::Task[:cucumber].invoke. Перед этим моя задача устанавливает набор переменных, которые должны использоваться в сценариях Cucumber.

Что я должен сделать, чтобы передать значение, доступное в задаче Rake, в код, который выполняется внутри объявления Cucumber Before?

Вот код, который у меня есть в Rakefile:

task :test, [:site] do |t, args|
    args = args.with_defaults(:site => DEFAULT_SITE)

    $site = args[:site]

    Rake::Task[:cucumber].invoke
end

Вот как выглядит код в Before прямо сейчас:

Before do
    if $site.ends_with?('.html')
        @engine = PageTester
    else
        @engine = SiteTester
    end
end

Этот код не должен делать ничего особенного, просто выберите определенный класс на основе того, что было получено в командной строке. Как я могу передать аргумент site коду внутри Before?

Ответы [ 2 ]

1 голос
/ 21 октября 2011

Одно из моих предположений было неверным: Rake и Cucumber не работают в одном и том же процессе, поэтому они не используют одну и ту же виртуальную машину Ruby.

Решение заключается в использовании

Cucumber::Rake::Task.new do |task|
    task.fork = false
end

Это заставит задачу cucumber запускаться в том же процессе Rake.Проблема с этим решением состоит в том, что сбой в Cucumber (в моем коде, вызванном из сценариев Cucumber) приведет к разрушению всей стойки.В моем случае это приемлемый компромисс (единственная цель моего Rakefile - подготовить подходящую среду и запустить в ней огурец), для других это может быть не так.

1 голос
/ 21 октября 2011

Установка переменной среды может быть самой простой:

ENV['_SITE'] = args[:site]

и в вашем блоке Before:

if ENV['_SITE'] && ENV['_SITE'].ends_with?('.html')
...