[[coverage]] == 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. === 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: [source,bash] $ 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: [source,bash] $ 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. === 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: [source,make] COVER_DEPS = cowlib When using multi application repositories you can exclude some applications by defining the `COVER_APPS` variable: [source,make] COVER_APPS = presence backend === 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: [source,make] COVER_EXCLUDE_MODS = cowboy_app cowboy_sup === 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. === Merging coverdata files The target `all.coverdata` will take all existing 'coverdata' files and merge them into one: [source,bash] $ make all.coverdata