I'm trying to add coverage report generation to a typescript library project.
The layout includes these directories:
project
├─ src
│ ├─ lib ## project code (typescript), *.tsx
│ ├─ test ## test specs (typescript), *.spec.tsx
│ └─ @types ## types I made for a few dependencies that didn't have them
└─ build
├─ lib ## compiled project code (ES5 + type info, with inline sourcemaps), *.js and *.d.ts
└─ test ## compiled test specs (ES5 + type info, with inline sourcemaps), *.spec.js and *.spec.d.ts
I have a test script in package.json that appears to work correctly:
"test": "mocha --reporter mocha-multi --reporter-options mocha-multi=mocha-multi.json --recursive build/test/**/*.spec.js",
(it generates 1413 lines of output; currently all tests are passing)
I'm trying to figure out how to run nyc so that
- All tests in
testare run - No files in
testare included in the coverage report - All code files in
libare included in the coverage report - No type info files in
libare included in the coverage report
I think I'm getting #1 right with this command:
npx nyc mocha --cache --reporter nyan build/test
which has this output:
872 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_,------,
0 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_| /\_/\
0 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-^|__( ^ .^)
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_- "" ""
872 passing (20s)
---------------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
---------------------|----------|----------|----------|----------|-------------------|
All files | 88.97 | 91.49 | 84.09 | 89.11 | |
lib | 88.51 | 91.49 | 83.33 | 88.62 | |
Awaitable.tsx | 88.51 | 91.49 | 83.33 | 88.62 |... 79,405,419,420 |
test | 100 | 100 | 100 | 100 | |
Abortable.spec.tsx | 100 | 100 | 100 | 100 | |
Awaitable.spec.tsx | 100 | 100 | 100 | 100 | |
---------------------|----------|----------|----------|----------|-------------------|
(but more colorful; I'm using --reporter nyan because I'd rather not repeat the 1413 lines of output from the test script)
That output fails goals 2 and 3; this question is about goal 2:
How do I tell nyc to exclude test from the coverage report?
(It also bothers me that the report is wrong - there are no tests that cover other tests, - but that is not what this question is about.)
I've tried adding a variety of includes and excludes to the command, none of which have affected the output:
- -x build/test
- -x '**/*.spec.js'
- -x '**/*.spec.tsx'
- -x 'build/test/**'
- -x test
- -x 'build/test/**/*.spec.js'
- -x 'build/test/**/*.spec.tsx'
- -x 'test/**'
- -x 'test/**/*.spec.js'
- -x 'test/**/*.spec.tsx'
- -n lib
- -n build/lib
- -n src/lib
- -x build/lib
- -x lib
- -x src/lib
- -X test
- -X build/test
- -X src/test
(As you can see, I'm not sure what the basedir is for these; I wasn't expecting to see the source file names in the report, but nyc is clearly doing something with both of src and build but not showing either in the report.)
I tried the include options after reading this answer, and it didn't help. After adding excludes for lib and seeing no effect, I'm getting the impression that the exclude option just doesn't work. I won't switch to ES6 as suggested in this answer until noone I work with still supports IE.