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