Skip to content

rcov and rails

rcov and Rails
I had the good fortune of attending Rails Conf recently on behalf of the consulting company I work for, Asynchrony Solutions. One of the topics at the great Refactotem tutorial (hosted by the guys from Relevance) was rcov, a code coverage tool for Ruby. One of the things I missed in, or was neglected from, the talk was how to actually run coverage tasks against Rails. So I thought I would share the code to make the test:coverage task that I found with some digging.

Add the following to the Rakefile in the root of your rails app:

require 'rcov/rcovtask'

namespace :test do
namespace :coverage do
desc "Delete aggregate coverage data."
task(:clean) { rm_f "coverage.data" }
end
desc 'Aggregate code coverage for unit, functional and integration tests'
  task :coverage => "test:coverage:clean"
    %w[unit functional integration].each do |target|
    namespace :coverage do
      Rcov::RcovTask.new(target) do |t|
      t.libs << "test"
      t.test_files = FileList["test/#{target}/*_test.rb"]
      t.output_dir = "test/coverage/#{target}"
      t.verbose = true
      t.rcov_opts << '--rails --aggregate coverage.data'
    end
  end
  task :coverage => "test:coverage:#{target}"
  end
end

You can then run rcov on your rails app by running:

rake test:coverage

After this completes, it will output index.html files in RAILS_ROOT/tests/coverage/[units, functional, integration]. There is no overall index file, as, if you read the rake task, it is running rcov separately for each of [units, functional, integration].

Rcov has a few things to work out like showing untested code in modules sometimes, but otherwise it gives you a good idea of sections and branches of your code that are not tested. It’s very easy to set up so why not give it a try. But remember, metrics can only help point out problem spots in your code, they are not a replacement for good coding techniques.

2 Comments

  1. pjammer wrote:

    Hey, is this rake task addition supposed to output all of the rails gems i use too? seems odd if it is, as i thought it’d only give me the test/**/*_test.rb files.

    Tuesday, January 5, 2010 at 8:53 am | Permalink
  2. emulpAideld wrote:

    Reliable Supplier of Generic Medications
    Free Shipping (COD, FedEx). Next Day Delivery.
    We accept: VISA, MasterCard, E-check, AMEX and more.
    Click “BUY NOW” and go to the pharmacies directory

    http://drugsdir.com/thumbs/pharma1.jpg
    http://drugsdir.com/thumbs/buynow.gif

    Lamisil spray effective.liptor vs zocor
    In the United States, the Federal Food, Drug, and Cosmetic Act defines what constitutes a prescription drug.ciprofloxacin versus levofloxacin
    On the other techniques, with all starvation diets, while some generic drugs.lamictal cost
    Lamisil liver functon test.Is lamisil safe to take.Lamisil granules.Is lamisil effective against candida.legal generic cialis no prescription
    Lamisil pdr.People with obstructive sleep apnea is a condition in which the natural remedies would be small.Pulse therapy with lamisil.drug digoxin price of it
    In an athletic or body-building context, steroid hormones to their own mind.triamcinolone acetonide cream us
    Lamisil jock itch.A recent clinical evidence of this drug on a long-term basis may develop into mania.Active ingredient in lamisil.Mexico pharmacy lamisil.elavil cats
    In the early because after this time, the insomnia is classified to be intermittent.getting off of seroquel side effects
    Lamisil in nose.toradol and infection
    Lamisil at cream patient comments.doxycycline and acne
    The diet requires treatment by a psychiatrist may recommend one or more appropriate time.Lamisil at solution dropper.Taking antibiotics unnecessarily increases your risk for developing incurable infections.buy tadalafil 180 online
    Adverse side effects lamisil.pregnancy during the use of cozaar

    Related topics:
    tramadol tablets 9244
    soma discount code 1287
    side effects of diazepam 8222

    Thursday, September 22, 2011 at 12:39 am | Permalink

Post a Comment

Your email is never published nor shared.