Excluding files from coverage when using Karma and Istanbul

Joe picture Joe · Mar 19, 2014 · Viewed 10.9k times · Source

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?

Answer

Jon Hieb picture Jon Hieb · Feb 11, 2015

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.