rails rspec사용시 테스트의 coverage를 측정해주는 gem인 simplecov와 simplecov-rcov에 대해 알아보자.

Posted by negabaro kim on Tuesday, October 20, 2020 Tags: rails/gem   2 minute read

개요

이 포스트에서는 rails rspec사용시 테스트의 coverage를 측정해주는 gem인 simplecov와 simplecov-rcov에 대해 알아보자.

simplecov

rspec실행하면 root dir/coverage 아래와 같은 coverage결과를 표시해준다.

image

해당 파일을 클릭하면 아래와 같이 행단위로 확인이 가능

image

rspec실행뒤에 아래와 같은 메시지도 추가되어있다.

Coverage report generated for RSpec to /sample_app/coverage. 187 / 194 LOC (96.39%) covered

인스톨 방법

gem추가 && bundle install

group :test do
  gem 'simplecov', require: false
end
bundle install

simplecov설정

#spec/supports/simplecov.rb
require 'simplecov'
SimpleCov.start 'rails'

설정이 이걸로 끝이다.

Simplecov-rcov

simplecov와 다른 coverage툴중에 rcov라는 gem이 있는데 simplecov를 해당 포맷으로 변환시켜주는 툴이다.

Jenkins의 Ruby metrics plugin사용시 rcov포맷이 요구되어 사용한다고 한다.

rspec실행해보면 root dir/coverage/ 이하에 rcov라는 디렉토리가 생기고 coverage용 파일이 있는걸 확인할 수 있었다. simplecov와 다르게 각 파일마다 하나의 파일이 만들어진다.

simplecov-rcov설치 방법

gem 'simplecov-rcov'
#spec/supports/simplecov.rb
require 'simplecov-rcov'
SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter

Simplecov 옵션

주로 사용하는 옵션으로 특정 파일을 하나의 그룹에서 모아놓을 수 있는 add_group과 특정 파일,디렉토리를 제외시킬 수 있는 add_filter가 있다.

자세한건 simplecov github을 참고 바란다.

require 'simplecov'

SimpleCov.start 'rails' do
  add_group "Controllers/organization", "app/controllers/organization"
  add_filter "/channels/"
end

메모1.

SimpleCov.start 'rails'

대신

SimpleCov.start

해주면 rails디렉토리별로 탭을 나누지 않았음.

메모2.

루트 디렉토리 이하에 .simplecov파일을 두고 거기에 simplecov설정을 해도 정상적으로 읽어온다.

메모3.

spec파일이 없으면 Coverage측정에 포함되지 않음. (다른 테스트 케이스에서 호출될 경우 포함됨)

그러므로 테스트용 클래스를 처음부터 만들어 놓아야된다. 나중에 일일이 찾아서 만들기가 굉장히 번거러움

reference:

simplecov-rcov github

simplecov-rcov link1

rcov