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

时间:2011-03-22 12:04:49

标签: cucumber rake jruby

我正在努力了解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

当然,它现在无头。

我猜我不应该在Cucumber任务的任务定义中做任何“工作”。有没有我应该考虑的替代方案来解决这个问题?

1 个答案:

答案 0 :(得分:1)

我通过执行以下操作解决了这个问题:

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任务时。为了实现这一点,代码需要执行,而不是作为指向该代码的指针以便稍后执行(这是我假设会发生的)