Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

babel@7 and jest configuration

Tags:

Maybe you may help me? I try to configure jest to use babel@7 So I have:

"jest": "^23.4.1", "@babel/core": "^7.0.0-beta.54", "babel-7-jest": "^21.3.3", "babel-jest": "^20.0.3", 

And jest config inside package.json

"jest": {     "transform": {       "^.+\\.js$": "babel-7-jest",     }, 

And got

TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string 

But if I use

"jest": {     "transform": {       "^.+\\.js$": "babel-jest",     }, 

I got

Requires Babel "^7.0.0-0", but was loaded with "6.26.3". If you are sure you have a compatible version of @babel/core, it is likely that something in your build process is loading the wrong version. Inspect the stack trace of this error to look for the first entry that doesn't mention "@babel/core" or "babel-core" to see what is calling Babel. 

babel config: https://gist.github.com/SilentImp/1506e9c26d16d9839a4469c6f3ae5c4d

Maybe you have some ideas?

like image 615
SilentImp Avatar asked Jul 21 '18 12:07

SilentImp


1 Answers

I believe I have found a working solution (no thanks to the Jest team providing broken documentation and evading GitHub issues around this issue).

You need the following in your devDependencies section of your package.json:

  "devDependencies": {     "@babel/core": "^7.0.0-beta.54",     "@babel/preset-env": "^7.0.0-beta.54",     "babel-core": "^7.0.0-bridge.0",     "babel-jest": "^23.4.0",     "bili": "^3.1.2",     "jest": "^23.4.1",     "regenerator-runtime": "^0.12.0"   } 

The following in your .babelrc:

{     "presets": [         [             "@babel/preset-env",             {                 "debug": false,                 "targets": {                     "browsers": [                         "last 3 versions"                     ]                 }             }         ]     ] } 

In my particular project I did not need to use the Jest config so I deleted my empty jest.config.js file.

Key points:

  • Remove babel-7-jest as this is deprecated as there is now official support for it.
  • Make sure to only use @babel/xyz packages going forward - the babel-core bridge one I have installed is the "official" way to use latest Babel 7. I imagine this need will be removed at some point in the future as everything migrates to Babel 7.
  • You can now use ES6+ features including import/export and no longer need the antiquated require().

Edit:

If you want to have a more detailed log of passing/failing tests then put this in your jest.config.js:

module.exports = {     "verbose": true    } 
like image 60
user9993 Avatar answered Nov 27 '22 13:11

user9993