React Native with Typescript and Jest is broken after 0.57 Update: Couldn't find preset “module:metro-react-native-babel-preset” relative to directory

后端 未结 3 692
心在旅途
心在旅途 2021-02-02 14:01

If you integrate test with Jest and Enzyme in the new React Version 0.57 and TypeScript, they won\'t work. Here are the steps to reproduce:

Create a new React Native pro

相关标签:
3条回答
  • 2021-02-02 14:41

    I found the answer here in this issue: https://github.com/facebook/metro/issues/242#issuecomment-421139247

    Basically, add this to your Jest section in package.json:

    "transform": { "^.+\\.js$": "<rootDir>/node_modules/react-native/jest/preprocessor.js" }
    
    0 讨论(0)
  • 2021-02-02 14:49

    had a similar issue when upgrading to 0.57, my package.json still contained an entry for babel-preset-react-native (which is now deprecated in favor of metro-react-native-babel-preset). All I had to do was

    yarn remove babel-preset-react-native

    and then

    yarn add metro-react-native-babel-preset --dev

    Lastly, make sure you change your .babelrc from

    {
      "presets": ["react-native"]
    }
    

    to

    {
      "presets": ["module:metro-react-native-babel-preset"]
    }
    

    More info can be found here

    0 讨论(0)
  • 2021-02-02 14:51

    If I use "presets": ["react-native"] then production/development is broken but tests are working.

    If I use "presets": ["module:metro-react-native-babel-preset"] then tests are broken but production/development is working.

    Not sure why it's like that but a .babelrc solution for me like below works both for development/production and tests. Just add env parameter to your .babelrc file.

    "env": {
        "test": {
            "presets": ["react-native"]
        },
        "production": {
            "presets": ["module:metro-react-native-babel-preset"]
        },
        "development": {
            "presets": ["module:metro-react-native-babel-preset"]
        }
    }
    
    0 讨论(0)
提交回复
热议问题