Setup Rcov with Ruby on Rails on Ubuntu
Rrcov is a code coverage tool for Ruby. First of all we install it with Ruby gems.
sudo gem install rcov
Then we create a file lib/tasks/rcov.rake in your rails project.
require 'rcov/rcovtask'
Rcov::RcovTask.new do |t|
t.test_files = FileList['test/unit/*.rb'] + FileList['test/functional/*.rb']
t.rcov_opts = ['--rails', '-x /var/lib', '--text-report', '--sort coverage']
t.output_dir = 'doc/coverage'
t.libs << "test"
t.verbose = true
end
You can change the options for your own usage. I like these options because worst covered files appeared on the top of the list. The HTML output is written in the folder doc/coverage. Then to run rcov you just enter.
rake rcov
No implicit conversion from nil to integer
If you got the following error.
no implicit conversion from nil to integer (TypeError)
You should edit the file /usr/lib/ruby/1.8/rexml/formatters/pretty.rb and replace this line
place = string.rindex(' ', width) # Position in string with last ' '
by this one
place = string.rindex(' ', width) || width # Position in string with last ' '
Stack level too depp
If you got the following error.
/usr/lib/ruby/1.8/rexml/formatters/pretty.rb:129:in `wrap': stack level too deep (SystemStackError)
You should edit the file /var/lib/gems/1.8/gems/rcov-0.8.1.2.0/lib/rcov/report.rb and replace the following line.
if RUBY_VERSION == "1.8.6" && defined? REXML::Formatters::Transitive
by this one
if RUBY_VERSION == "1.8.7" && defined? REXML::Formatters::Transitive