Testovací denní chléb 2 - rcov podrobněji
O tom co je rcov jsme již psali, dnes jen doplním malý tip na jeho používání. Robert Cigán ve své přednášce na Ostrava on Rails poznamenává, že na stoprocentní pokrytí kódu testy se dostat nelze, neboť se jako kód započítávají například i konfigurační soubory. Mno abych zvýšil vaši motivaci možností dosáhnout oné vysněné hranice (některým učastníkem minulého pražského setkání toto počínání bylo přirovnáno k onanii.. nebo že by vás tahle analogie moc nemotivavala??), zkuste tohle:
rcov --rails test/**/*_test.rb
Kouzelný přepínač --rails odstraní z přehledu obsah adresářů config, environment a vendor. Pokud chcete odebrat nebo přidat jiné adresáře (obzvláště vhodné pro non-Rails Ruby projekty), zkuste přepínače --exclude nebo --include, které očekávají seznam regulárních výrazů. Například
--exclude '^generic/'
vynechá z přehledu vše z adresáře generic (toho přímo přístupného z aktuální složky, ne žádného více vnořeného).
Prima, ale komu by se to pokaždé chtělo vypisovat, že? Řešením je obohacení vašeho Rakefilu o následující:
namespace :test do
desc 'Measures test coverage'
task :coverage do
dir = "coverage"
rm_rf dir
rcov = "rcov --rails -o #{dir} --text-summary"
system("#{rcov} test/**/*_test.rb")
system("open #{dir}/index.html") if PLATFORM['darwin']
end
end
Tento nový úkol Rakefilu smaže starý adresář s vygenerovanými statistikami, spustí rcov a pak dokonce i otevře prohlížeč (na OS X, nahraďte čímkoliv potřebujete).
Tímto dostáváme od rcovu přesné údaje a spuštění je již tak snadné, že je hřích ho nepoužívat.
rake test:coverage
about 1 hour later: