Friday, September 12, 2008

Implementation of CruiseControl.rb and RCov

CruiseControl.rb is Ruby based continuous integration tool which is used for continuous build process including testing, email notification. Also provide the details of all build.

On the other hand, RCov is very well known code coverage tool for Ruby. It is used to get the information of test coverage.

These two tools are so good together and their implementation is incredibly simple which is describe below:

Download: Click here to download. After completing the download unpack it.

Add project: Go to the unpacked directory from command prompt and execute following command:
cruise add <project-name> --url <project-url>.
This will create a directory under cruise data, then checks out your project to ./cruise/projects/<project name>/work/

Start Cruise: Execute command: cruise start. It will run your CrouiseControl on port 3333. Browse - http://localhost:3333/. If everything is going well, you will see the the CruiseControl dashboard with project list. You can build your project and see the build report.

Create database: You have to create test database and edit database.yml to connect with database, performing rake RAILS_ENV=test db:migrate, running rake test and making sure that it passes.

Install rails_rcov: Install RCov gem to CruiseControl server by using gem install RCov and plugin to project folder by using following command:
 ruby script/plugin install http://svn.codahale.com/rails_rcov
Add rake task: If you installed the plugin into your project you have some useful rake tasks. Now you have to add “cruise.rake” task to the “lib/tasks” directory of your Ruby on Rails project with following:
desc 'Continuous build target'
task :cruise do
out = ENV['CC_BUILD_ARTIFACTS']
mkdir_p out unless File.directory? out if out

ENV['SHOW_ONLY'] = 'models,lib,helpers'
Rake::Task["test:units:rcov"].invoke
mv 'coverage/units', "#{out}/unit test coverage" if out

ENV['SHOW_ONLY'] = 'controllers'
Rake::Task["test:functionals:rcov"].invoke
mv 'coverage/functionals',"#{out}/functional test coverage" if out

Rake::Task["test:integration"].invoke
end
That’s all, now your project has code coverage. You can browse the source within the browser from dashboard and see which lines are covered and which are not. Enjoy!!

Update:
It was written on September 2008. Please click here to read documentation by thoughtworks.com

1 comment:

  1. Just stumbled on your blog - you should really check out metric_fu: http://metric-fu.rubyforge.org - easy to install and you get a bunch more metrics than just rcov - enjoy!

    ReplyDelete