How do I exclude *.spec.mjs using c8?

less than a minute read 05-10-2024
How do I exclude *.spec.mjs using c8?


Excluding Test Files from Code Coverage with c8

Problem: You're using c8 for code coverage analysis in your JavaScript project. But, you want to exclude test files like those ending with *.spec.mjs from the coverage report because they aren't part of the production code.

Solution: c8 provides powerful configuration options to customize how it analyzes your code. To exclude test files, you can modify your c8 configuration using a .c8rc file.

Scenario and Code:

Let's imagine you have a project structure like this:

my-project
├── src
│   └── myModule.mjs
└── test
    └── myModule.spec.mjs

Your myModule.mjs file is the production code you want to analyze for coverage, while myModule.spec.mjs is your test file. You can use a .c8rc file to exclude the test file from coverage.

Example .c8rc configuration:

{
  "exclude": [
    "**/test/**/*.mjs",
    "**/__tests__/**/*.js" 
  ]
}

Explanation:

  • exclude: This property defines patterns for files and directories to exclude from coverage analysis.
  • **/test/**/*.mjs: This pattern matches all *.mjs files within the test directory and its subdirectories, effectively excluding all test files from coverage.
  • **/__tests__/**/*.js: This pattern excludes files within a common __tests__ directory, if you happen to use that for your tests.

Additional Insights:

  • Pattern Flexibility: You can use various wildcards and regular expressions to define your exclusion patterns. Refer to c8's documentation for details.
  • include Property: While exclude is the most common approach, you can also use the include property in your .c8rc to specify only the files you want to include in coverage analysis.
  • Coverage Tools: Consider using a dedicated coverage reporting tool like nyc or istanbul alongside c8 for enhanced reporting and visualization.

Conclusion:

Excluding test files from your code coverage analysis is essential for accurate and meaningful results. By using the exclude property in your .c8rc configuration, you can fine-tune c8's behavior and focus on coverage metrics for your production code.

Resources: