Rcov::RcovTask.new(:all) do
task :rcov => “rcov:cucumber”
end
Cucumber::Rake::Task.new(:cucumber) do |t|
…
Spec::Rake::SpecTask.new(:rspec) do |t
…
Rcov::RcovTask.new(:testunit) do |t|
…
Now, rake rcov:cucumber runs the cucumber rcov task as expected.
However, both rake rcov and rake rcov:all run rake rcov:testunit. I
cannot fathom why. Can someone explain this to me?
Cucumber::Rake::Task.new(:cucumber) do |t|
puts "Why am I in the cucumber task?
…
end
Spec::Rake::SpecTask.new(:rspec) do |t|
puts "Why am I in the rspec task?
…
end
end
Rcov::RcovTask.new(:testunit) do |t|
puts "Why am I in the rspec task?
…
end
Rcov::RcovTask.new(:complete) do
puts “What the hell am I doing here?”
…
end
end
When I run rake rcov:cucumber I see this:
Why am I in the cucumber task?
Why am I in the rspec task?
Why am I in the testunit task?
What the hell am I doing here?
This indicates that the entire rake task is processed regardless of the
argument given, which to me makes no sense at all. Can somebody explain
why I am observing this behaviour?
I think that I have this straightened now.
Cucumber::Rake::Task.new(:cucumber) etc. are factory methods that are
processed as encountered by rake.
Having spent the day delving into Rake and the internals of factory
methods for Rake included with RSpec and Cucumber, I did a little write
up on how to create a custom Rake task for Rcov. I would appreciate it
if people with a deeper knowledge of Rake and Rcov would review this
document and point out any errors or misunderstandings that it may
contain.