Joe
Joe

Reputation: 8042

Excluding files from coverage when using Karma and Istanbul

I am using Karma to test my JavaScript and get coverage reports. I am using the Istanbul coverage report, which is the default. Here is my preprocessors parameter:

    preprocessors: {
        'framework/**/*.js':'coverage',            
        'framework/*.js':'coverage',
        '!framework/node/**/*.js':'coverage',         
        '!framework/test/**/*.js':'coverage',                                 
        'framework-lib/**/*.js':'coverage',
        '!framework-lib/tool-data-api/tool-data-api.js':'coverage'
    }

As you can see, I am trying to use the "!" as a negate command, which usually works with Node. However, it is not working here and none of my directories are being excluded.

Is there any way to do what I am trying to accomplish?

Upvotes: 8

Views: 12532

Answers (5)

oezkany
oezkany

Reputation: 211

you can modify in angular.json under test->options

"codeCoverageExclude": ["src/testing/**/*"]

Upvotes: 0

Jon Hieb
Jon Hieb

Reputation: 780

According to https://karma-runner.github.io/0.12/config/configuration-file.html:

**/*.js: All files with a "js" extension in all subdirectories
**/!(jquery).js: Same as previous, but excludes "jquery.js"
**/(foo|bar).js: In all subdirectories, all "foo.js" or "bar.js" files

So, based on this, I tried the following:

preprocessors: {
    'framework/**/!(node|test)/*.js': 'coverage',
    'framework-lib/**/!(tool-data-api).js': 'coverage'
}

Which seems to have accomplished what you are looking for.

As a note to others who come here looking for how to target all files EXCEPT .spec.js files, try:

'**/!(*spec).js'

Which seems to work for me.

Upvotes: 7

Alexandr Skachkov
Alexandr Skachkov

Reputation: 560

In the Karma used minimatch.js lib for mathing files. So you need rewrite you rules. For instance to exclude folder node node it should has

preprocessors: {
        'framework/*[!node]/*.js':'coverage',            
    }

Upvotes: 3

joeycozza
joeycozza

Reputation: 1423

I'm not sure if you are running "istanbul cover ..." to run your coverage report, but if you are, you can use the -x flag to exclude files/patterns. Typing in "istanbul help cover" will show you usage including this.

 -x <exclude-pattern> [-x <exclude-pattern>]
              one or more fileset patterns e.g. "**/vendor/**"

Upvotes: 1

GP2
GP2

Reputation: 2598

Make sure that the directories / file you want to exclude are not loaded by any other include. for example, 'framework//.js':'coverage' will load files you are trying to exclude in '!framework/node//.js':'coverage'

Upvotes: 0

Related Questions