Create-react-app: Allow specifying jest's `cacheDirectory`

Created on 29 Jun 2017  Â·  7Comments  Â·  Source: facebook/create-react-app

Hi,
this proposal is related to issue https://github.com/facebook/jest/issues/3705 (jest cache is not handled correctly upon moving files from point A to point B. This eventually causes coverage information to be displayed incorrectly).

For this reason, it would be nice to have a way to clear the jest cache manually when required. In order to do that, it would be useful to have a way to set the cache directory.

This is possible in Jest by setting the cacheDirectory config option in package.json (or from the command line). Unfortunately, in an application created with create-react-app, this config option is among those which cannot be overridden:

Out of the box, Create React App only supports overriding these Jest options:

  • collectCoverageFrom
  • coverageReporters
  • coverageThreshold
  • snapshotSerializers.

These options in your package.json Jest configuration are not currently supported by Create React App:

  • cacheDirectory

Without being able to set cacheDirectory, the cache files are created in a random-looking temporary directory such as /private/var/folders/zj/112vf5bj0js_hx6l9ntz3w780000gn/T/jest_dx (at least on my Mac Os X Sierra machine).

I think it would be useful to be able to set cacheDirectory to something more predictable, such as ./node_modules/.cache/jest, or even ./.cache/jest.

What do you think?

Thanks in advance for this awesome tool!

enhancement

Most helpful comment

Watchman picks it up, it has to be ignored globally, I managed to publish some private cache to npm at some point, all these kinda things. Since we moved it to tmp, we didn't have a problem with it at FB.

All 7 comments

I think the right thing to do would be to fix it in Jest.

I have another use-case for setting the cacheDirectory.

We use CircleCI to test our builds, and in other React projects we've seen speedups of up to 60% when CircleCI starts to cache the jest cache between each build.
This is trivial to achieve when we manually set jest's cache directory, but right now I have to find a way to cache jest's default directory in between my CircleCI builds.

Similar to issue facebook/jest #1608, where the recommended solution is to configure the cache directory manually.

We already store Babel cache in node_modules/.cache so we might as well do the same for Jest.
But I'd love to learn more about:

We used to store it inside of Jest but it was always a huge issue to people

Can you research why it was an issue before? cc @cpojer

Watchman picks it up, it has to be ignored globally, I managed to publish some private cache to npm at some point, all these kinda things. Since we moved it to tmp, we didn't have a problem with it at FB.

I'm sorry, I tried doing some detective work on Google and StackOverflow, but I can't really elaborate more on the issue than what @cpojer has already described.

I can only say that I've stored the cache in /.tmp/ in a previous project without problems. Although that was a React Native project, so I'm not even sure the comparison is valid at all.

I'd be okay taking a PR that enables this configuration.

Closing for lack of interest.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

fson picture fson  Â·  3Comments

alleroux picture alleroux  Â·  3Comments

DaveLindberg picture DaveLindberg  Â·  3Comments

adrice727 picture adrice727  Â·  3Comments

stopachka picture stopachka  Â·  3Comments