Skip to content

Code coverage is missing when using projects, if each project's rootDir is not set to the root rootDir's value #5417

@jure

Description

@jure

Do you want to request a feature or report a bug?

A bug.

What is the current behavior?

When you're using Jest with projects and you want to collect coverage across them, following this advice #4255 (comment) does not give you coverage. You still need to set each project's rootDir setting to the root root, e.g. "../" (https://github.com/adaniliuk/jest-projects-config-issue/blob/master/client/jest.config.js#L4).

If the current behavior is a bug, please provide the steps to reproduce and
either a repl.it demo through https://repl.it/languages/jest or a minimal
repository on GitHub that we can yarn install and yarn test.

You can see it here. https://github.com/jure/jest-projects-config-issue. The current result is:

Test Suites: 2 passed, 2 total
Tests:       4 passed, 4 total
Snapshots:   1 passed, 1 total
Time:        1.809s, estimated 2s
Ran all test suites in 2 projects.
----------|----------|----------|----------|----------|----------------|
File      |  % Stmts | % Branch |  % Funcs |  % Lines |Uncovered Lines |
----------|----------|----------|----------|----------|----------------|
All files |  Unknown |  Unknown |  Unknown |  Unknown |                |
----------|----------|----------|----------|----------|----------------|

If you were to add rootDir ../../ to each project, and adjust the configs accordingly, it would work OK.

What is the expected behavior?

Configuring a global coverage config (e.g. here https://github.com/jure/jest-projects-config-issue/blob/master/jest.config.js#L6) should use the global rootDir (which is also the context of the config at that point), when matching files for instrumentation here: https://github.com/facebook/jest/blob/9afeb9c757e4b92dbf670e66545dce3df5c407c4/packages/jest-runtime/src/should_instrument.js#L59-L69.

As it is, the match is done against the relative path, where rootDir is the rootDir of each project, e.g.

relative filename:  server.js
filename:  /Users/juretriglav/src/config-issue-2/packages/server/server.js
rootDir:  /Users/juretriglav/src/config-issue-2/packages/server

This means that, for example, the global pattern 'packages/server/**/*.{js,jsx}' won't match.

Possible workarounds

  1. It's possible to specify global coverage patterns in their relative form, e.g. '*.js', but those are too generic and match too much compared to their specific alternatives.

  2. As mentioned above, one can specify rootDir to be the global rootDir in each package, and adjust all config accordingly. This seems like more of a hack than a workable solution.

Please provide your exact Jest configuration and mention your Jest, node,
yarn/npm version and operating system.

Jest 22.1.4, Node.js 9.4.0, macOS 10.12.6

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions