【问题标题】:Why are my Cucumber Rake Tasks executing even though I did not ask them to?为什么即使我没有要求他们执行我的 Cucumber Rake 任务?
【发布时间】:2011-07-20 10:32:32
【问题描述】:

我很难理解 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 任务的任务定义中做任何“工作”。有没有我应该研究的替代方案来解决这个问题?

【问题讨论】:

    标签: cucumber rake jruby


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-13
      • 2020-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多