0.01
Repository is archived
Low commit activity in last 3 years
No release in over a year
Tools for collecting code coverage from tests.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies
 Project Readme

AeTestCoverage

Tools for collecting per test code coverage for Ruby applications. Read more about the motivation for the gem and how it's used at Appfolio here. This project has been archived and is no longer receiving updates, but will remain publicly accessible for open-source demonstration purposes.

Installation

Add this line to your application's Gemfile:

gem 'ae_test_coverage'

And then execute:

bundle

Or install it yourself as:

gem install ae_test_coverage

Usage

To collect code coverage using the Ruby's build in Coverage module, it's important to begin code coverage before the application classes are loaded. To accomplish this, it's recommended that the code below be run immediately at the beginning of testing.

    require 'test_coverage'
    
    AeTestCoverage.configure do |config|
      # Setup a way to conditionally enable per test coverage collection
      config.enable_check = Proc.new { !ENV['TEST_COVERAGE_ENABLED'].nil? }
    
      # Configure what files to exclude from code coverage output
      config.file_exclusion_check = Proc.new { |file| file.include?('/gems/') || file.include?('/lib/ruby/') }
      
      # Decalre which coverage types should be enabled for collection
      # By default all collerctors are enabled
      config.enabled_collector_classes = [
        AeTestCoverage::Collectors::RubyCoverageCollector,
        AeTestCoverage::Collectors::ActiveRecord::AssociationCollector,
        AeTestCoverage::Collectors::ActiveRecord::AttributeWriterCollector,
        AeTestCoverage::Collectors::ActiveRecord::AttributeReaderCollector,
        AeTestCoverage::Collectors::ActionView::RenderedTemplateCollector,
        AeTestCoverage::Collectors::ActionView::AssetTagCollector,
        AeTestCoverage::Collectors::Webpacker::WebpackerAppCollector
      ]
    
      # Set the location where coverage files will be written 
      config.coverage_path = '/tmp/coverage'
    
      # If using the WebpackerAppCollector, configure the paths where
      # webpacker apps can be found.  
      config.webpacker_app_locations = [
        File.join('app', 'javascript'),
      ]
    end
    
    # Initialize the coverage collectors which will setup any hooks that are
    # needed to collect coverage data 
    AeTestCoverage.initialize_collectors
    
    include AeTestCoverage::TestCoverageMethods
    
    # For minitest add setup and tear down steps that write the coverage
    # data after each test finishes running 
    setup :start_recording_code_coverage
    teardown :write_code_coverage_artifact