Chapter 23. Code coverage

Erlang.mk provides support for code coverage via the tool cover that comes with Erlang/OTP. Code coverage lets you see what parts of your code are covered by the tests.

23.1. Enabling cover when running tests

To run tests with code coverage enabled, simply define COVER=1 either on the command line or in your Makefile:

$ make tests COVER=1

When running the targets tests or check the code coverage report will be built automatically. This is not the case for test framework specific targets, however. In those cases you can generate the reports manually:

$ make eunit proper COVER=1
$ make cover-report

Note that Common Test has some support for cover built-in and that it will generate code coverage reports in the Common Test logs regardless. The report that Erlang.mk generates is however common to all test frameworks and might be more useful.

23.2. Adding applications to the cover report

By default Erlang.mk will include all the applications in the code coverage report, except external dependencies.

To include some dependencies in the report, you can define the COVER_DEPS variable:

COVER_DEPS = cowlib

When using multi application repositories you can exclude some applications by defining the COVER_APPS variable:

COVER_APPS = presence backend

23.3. Removing modules from the cover report

By default Erlang.mk will include all modules in the cover report.

To exclude some modules from the report, you can define the COVER_EXCLUDE_MODS variable:

COVER_EXCLUDE_MODS = cowboy_app cowboy_sup

23.4. Configuring paths

By default Erlang.mk will store coverdata files and code coverage reports under the cover/ directory. The variables COVER_DATA_DIR and COVER_REPORT_DIR can be set to use a different location.

23.5. Merging coverdata files

The target all.coverdata will take all existing coverdata files and merge them into one:

$ make all.coverdata