Cucumber 为什么我的黄瓜耙任务会执行,即使我没有要求他们执行?

Cucumber 为什么我的黄瓜耙任务会执行,即使我没有要求他们执行?,cucumber,rake,jruby,Cucumber,Rake,Jruby,我正在努力理解Rake是如何处理任务的。我可能做错了,但看不出什么是“正确”的方式 我有以下任务: 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 che

我正在努力理解Rake是如何处理任务的。我可能做错了,但看不出什么是“正确”的方式

我有以下任务:

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
这对我来说似乎是直截了当的

问题是当我运行任何cumber任务时,我看到两个任务都执行了。因此,如果我这样做:

rake features:browser

我看到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
当然,它现在正在无头运行


我猜我不应该在Cucumber任务的任务定义中做任何“工作”。我是否应该寻找其他方法来解决这个问题

我通过以下操作解决了此问题:

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任务,而实际发生的是一个动态构建的rake任务。为了实现这一点,代码需要执行,而不是充当指向该代码的指针,以便稍后执行(我假设会发生这种情况)

task :setupenv do
  setup_environment
end

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