10-30-2019 01:41
- Mark as New
- Bookmark
- Subscribe
- Permalink
- Report this post

10-30-2019 01:41
- Mark as New
- Bookmark
- Subscribe
- Permalink
- Report this post
I have a Clock Face project written in Typescript, tested with Jest and built with NPM.
By default Jest calculates coverage only for files that have tests. In my case, I have business logic separated from index.ts and covered with tests. However index.ts is not tested and I want it to reflect in the coverage report (right now it shows 100% coverage which is not true). For that reason I added the following configuration to Jest so that it includes all my ts files to the report (including index.ts):
"collectCoverageFrom" : ["app/**/*.ts"],
But now if I run the coverage report:
npm test -- --coverage
I get the following errors:
app/index.ts:1:32 - error TS2307: Cannot find module 'clock'.
1 import clock, {TickEvent} from "clock";
~~~~~~~
app/index.ts:2:22 - error TS2307: Cannot find module 'document'.
2 import document from "document";
~~~~~~~~~~
app/index.ts:3:27 - error TS2307: Cannot find module 'user-settings'.
3 import {preferences} from "user-settings";
These are the Fitbit APIs and they are somehow not found by Jest.
Question: How to enable code coverage for files that use Fitbit APIs?

10-30-2019 02:59
- Mark as New
- Bookmark
- Subscribe
- Permalink
- Report this post



10-30-2019 02:59
- Mark as New
- Bookmark
- Subscribe
- Permalink
- Report this post
These are external modules that Jest doesn't know about. You can provide fake implementations of them for your tests via Jest's moduleNameMapper option in the Jest config.

10-30-2019 04:54
- Mark as New
- Bookmark
- Subscribe
- Permalink
- Report this post

10-30-2019 04:54
- Mark as New
- Bookmark
- Subscribe
- Permalink
- Report this post
Thank you for your answer. Could you please elaborate a bit. I am unfortunately inexperienced in JS/TS and the documentation didn't help much.

10-30-2019 05:20
- Mark as New
- Bookmark
- Subscribe
- Permalink
- Report this post



10-30-2019 05:20
- Mark as New
- Bookmark
- Subscribe
- Permalink
- Report this post
Something like this:
module.exports = {
preset: 'ts-jest/presets/js-with-ts',
moduleNameMapper: {
document: '<rootDir>/test/document.js',
},
};
document.js then has whatever methods/variables you use exported for use in tests.

03-06-2020 11:24
- Mark as New
- Bookmark
- Subscribe
- Permalink
- Report this post

03-06-2020 11:24
- Mark as New
- Bookmark
- Subscribe
- Permalink
- Report this post
As @LiamFitbit said, you need to mock those modules.
I did that here: https://github.com/SergioMorchon/fitbit-views/tree/master/__mocks__
You can look at jest manual mocks documentation: https://jestjs.io/docs/en/manual-mocks

