On Jul 9, 2008, at 5:52 PM, Rick DeNatale wrote:

At work we've got a rather complex app with both specs and tests. Our default rake task runs all our our tests and specs. We've also got separate rake tasks to run groups of tests and specs in the various subdirectories. The default task simply lists all the individual tasks as pre-reqs.

We do a lot of branching and merging, so we really want to run all of the tests and specs to see all failures.

We just realized that Rspec is aborting rake when a spec fails or errors in an individual rake task. I've been trying to fix this to no avail. I notice that SpecTask has an attribute accessor fail_on_error which looks like it SHOULD prevent terminating rake if it's set to false. So I tried that and it doesn't seem to work. Here's our projects lib/tasks/spec.rake, any ideas?


def spec_tasks
%w{spec:controllers spec:models spec:helpers spec:views spec:lib} + spec_subdirs.map {|t| "spec:#{t}"}
end

begin
  require RAILS_ROOT + '/vendor/plugins/rspec/lib/spec/rake/spectask'

  namespace :spec do
   spec_subdirs.each do |task|
     next if Rake::Task.task_defined?("spec:#{task}")

spec:models, views, controllers and helpers are all defined already in vendor/plugins/rspec-rails/tasks/rspec.rake, so the next keyword is being invoked for all of those. You'll need to undefined them before you redefine them here.

spec_tasks.each {|t| Rake::Task::TASKS.delete t}

Cheers,
David



     desc "Run the specs under spec/#{task}"
     Spec::Rake::SpecTask.new(task) do |t|
       t.fail_on_error = false
       t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
       t.spec_files = FileList["spec/#{task}/*_spec.rb"]
     end

     namespace(task) do
       Spec::Rake::SpecTask.new(:rcov) do |t|
         t.fail_on_error = false
t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts \""]
         t.rcov_opts = ['--include', "\"app/#{task}/.*.rb$\""]
         t.rcov = true
         t.spec_files = FileList["spec/#{task}/*_spec.rb"]
       end
     end
   end
  end
rescue LoadError => e
  puts "Spec tasks are not available - #{e}"
end

namespace :spec do
  desc "Run each set of specs individually"
  task :each => spec_tasks
end


--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/ _______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users

_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to