David Smalley
2007-May-17 17:20 UTC
[rspec-users] strange results when using rcov with rspec
I have some specs tucked away inside my vendor/plugins directory that I want to run when I run rake spec. I''ve got the rake task working just fine, but for some reason rcov seems to choke when I try to tweak the included/excluded files to ignore any files in app/ but to include files in vendor/plugins/ plugin/app/** The error I get is this: No file to analyze was found. All the files loaded by rcov matched one of the following expressions, and were thus ignored: [/\A\/usr\/ lib/, /\btc_[^.]*.rb/, /_test\.rb\z/, /\btest\//, /\bvendor\//, /\A\/ usr\/lib\/ruby\/gems\/1\.8\/gems\/rcov\-0\.8\.0\.2\/lib\/rcov\/report \.rb\z/, /lib\/spec/, /bin\/spec\//, /app/, /config/] You can solve this by doing one or more of the following: * rename the files not to be ignored so they don''t match the above regexps * use --include-file to give a list of patterns for files not to be ignored * use -- exclude-only to give the new list of regexps to match against * structure your code as follows: test/test_*.rb for the test cases lib/ **/*.rb for the target source code whose coverage you want making sure that the test/test_*.rb files are loading from lib/, e.g. by using the -Ilib command-line argument, adding $:.unshift File.join (File.dirname(__FILE__), "..", "lib") to test/test_*.rb, or running rcov via a Rakefile (read the RDoc documentation or README.rake in the source distribution). ./vendor/plugins/sor_core/app/models/ collection.rb:1: uninitialized constant ActiveRecord (NameError) from /usr/lib/ruby/gems/1.8/gems/rcov-0.8.0.2/bin/rcov:516 from /usr/ bin/rcov:16 rake aborted! RSpec failures (See full trace by running task with --trace) A snippet of the rake task I am using looks like this: desc "Run the specs under vendor/plugins/**/spec/models" Spec::Rake::SpecTask.new(:models => "db:test:prepare") do |t| t.spec_opts = [''--options'', "\"#{RAILS_ROOT}/spec/spec.opts\""] t.spec_files = FileList["vendor/plugins/#{ENV[''PLUGIN''] || "**"}/spec/models/*_spec.rb"] t.rcov = true t.rcov_dir = "spec/reports/model-coverage" t.rcov_opts = [''--include-file'', "vendor\/plugins\/#{ENV [''PLUGIN''] || "**"}\/app\/models\/*", ''--exclude'', "lib\/spec,bin\/ spec/,app,config"] t.spec_opts = ["--format", "html"] t.out = "spec/reports/model-report/index.html" end If I just run a plain old rspec with this command: desc "Run the specs under spec/models" Spec::Rake::SpecTask.new(:models => "db:test:prepare") do |t| t.spec_opts = [''--options'', "\"#{RAILS_ROOT}/spec/spec.opts\""] t.spec_files = FileList["vendor/plugins/#{ENV[''PLUGIN''] || "**"}/spec/models/*_spec.rb"] end Then all my tests run through just fine without any problems (but obviously produce no spec reports or rcov reports) Anyone got any ideas? Thanks, David