Running Jest tests with Flow typed Javascript files
This will be a simple tutorial about running Jest tests with Flow typed Javascript files in NodeJS project.
Problem
Recently I've started adding Flow types to my existing NodeJS project which uses Jest testing framework. It turns out immidiately that there is no "out of the box" support for Flow in Jest. This is strange for me because both are Facebook products, so I was hoping for seamless integration.
Solution
There is a quite simple solution which is based on two Babel originated packages: babel-jest and babel-plugin-transform-flow-strip-types. Install them with:
yarn add --dev babel-jest babel-plugin-transform-flow-strip-types
Then adjust configuration inside .babelrc file as described on babel-plugin-transform-flow-strip-types NPM repository page:
{
"plugins": ["transform-flow-strip-types"]
}
Now after executing yarn jest
all my Flow type hinted JS files works as expected.
No jest.config.js modification required!
Issues
While trying to get Jest tests to work with Flow I've got one problem - a dead end. It was jest-flow-transform package. Despite declaring approperiate configuration inside jest.config.js file in transform
section I was constantly getting a message:
TypeError: ...mockResolvedValue is not a function
I didn't find any solution for that and move on to babel-jest which is described above in a solution section.
Create React App (CRA) Jest tests
If you are using Create React App and Jest tests reports a lot of Flow bugs just install jest
directly with:
yarn flow-typed install jest@20.0.4
You should replace 20.0.4
with whichever Jest version is currently used by CRA (check it with yarn list | grep jest
). Unfortunatelly, there seems to be no way to automatically install Flow definitions for Jest. See CRA #3904 for more info.