Почему выполняются мои задачи по граблям с огурцом, хотя я их об этом не просил? - PullRequest
0 голосов
/ 22 марта 2011

Мне трудно понять, как Rake обрабатывает задачи Cucumber.Я, вероятно, делаю это неправильно, но не вижу, что такое «правильный» путь.

У меня есть следующие задачи:

namespace :features do

  Cucumber::Rake::Task.new(:browser, 'Run Cucumber Features using a Browser') do |t|
    t.profile = ENV['HUDSON'] ? 'browser_hudson' : 'browser' 
    setup_environment
    check_profile(t.profile)
  end

  Cucumber::Rake::Task.new(:headless, 'Run Cucumber Features using a Headless Browser') do |t|
    t.profile = ENV['HUDSON'] ? 'hudson' : 'default' 
    setup_environment
    check_profile(t.profile)
  end
end

Мне кажется, это прямо вперед.

Проблема в том, что когда я запускаю любую из задач с огурцом, я вижу, как обе задачи выполняются.Поэтому, если я сделаю:

rake features:browser

или

rake features:headless

, я увижу, что setup_environment и check_profile запускаются дважды, а затем вызывается фактическая задача.В итоге я вижу что-то вроде этого:

setup_environment called
check_profile called, running in browser
setup_environment called
check_profile called, running headless
** Invoke features:browser (first_time)
** Execute features:browser

И, конечно, теперь он работает без головы.

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

1 Ответ

1 голос
/ 22 марта 2011

Я решил эту проблему, выполнив следующие действия:

task :browser => ['features:setupenv', 'features:isbrowser', 'features:browser'] do
end

task :headless => ['features:setupenv', 'features:headless'] do
end

Две новые функции:

task :setupenv do
  setup_environment
end

task :isbrowser do
  ENV['BROWSER'] ||= 'true'
end

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

...