Jest TransformIgnorePatterns针对React-Native预设忽略所有node_modules

26

我是jest的新手,

在我的项目的package.json中设置了jest配置后,

Package.json

"jest": {
    "preset": "react-native",
    "verbose": true,
    "moduleDirectories": ["node_modules", "src"],
    "transformIgnorePatterns": ["node_modules/(?!(react-native-cookies)/)"]
  },

我已经尝试过以下方法来忽略所有的 node 模块:

"transformIgnorePatterns": ["node_modules"]

但对我来说没有起作用

以及.babelrc

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

我的 LoginScreen-Test.js 代码:

测试用例

import 'react-native';
import React from 'react';
import LoginScreen from '../src/components/LoginScreen';
import renderer from 'react-test-renderer';

it('renders correctly', () => {
  const hello = renderer.create(<LoginScreen/>).toJSON();
  expect(hello).toMatchSnapshot();
});

我开始运行 --> npm test 或者 npm test -- -u

它报告以下错误:

终端输出

FAIL tests/LoginScreen-test.js ● 测试套件运行失败

/Users/Documents/Projects/node_modules/react-native/Libraries/Utilities/Platform.ios.js:31
  get isTesting(): boolean {
                 ^

SyntaxError: Unexpected token :

  at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/script_transformer.js:316:17)
  at Object.get Platform [as Platform] (node_modules/react-native/Libraries/react-native/react-native-implementation.js:111:27)
  at Object.<anonymous> (node_modules/react-native-cookies/index.js:9:17)
我想通过TransformIgnorePattern来忽略所有Node模块,但似乎对我的React-Native预设不起作用。寻找有用的答案...
结果为:
我想通过TransformIgnorePattern来忽略所有Node模块,但似乎对我的React-Native预设不起作用。寻找有用的答案...

你尝试过使用 --no-cache 运行它吗? - Andreas Köberle
我在我的package.json文件中尝试了这样的代码"test": "jest --no-cache",但是没有任何新的进展。 - Lucifer_Latif
2
我看到了和你一样的问题,使用的是React Native版本0.56.0和Jest 23.6.0。似乎除了一些“清除依赖并重新安装”之外,没有任何答案……即使当然清除锁定也不起作用。 - Chris
3个回答

50
这个错误显示 "react-native" 没有被转换: react-native/Libraries/Utilities/Platform.ios.js:31 "transformIgnorePatterns": ["node_modules"] 不会起作用,因为它几乎是默认行为。
你尝试使用官方推荐的配置了吗?对于你的项目,应该看起来像这样: "transformIgnorePatterns": [ "node_modules/(?!(react-native|react-native-cookies)/)" ] ?! 很重要,因为它的意思是忽略 node_modules 中除了 react-nativereact-native-cookies 以外的一切。

1
对我来说至关重要的是,您希望该模式与目标文件/文件夹匹配。我认为链接的示例很好地展示了这一点:https://regex101.com/r/JsLIDM/1 - BobtheMagicMoose

10
这是2023年的正确配置。
   "transformIgnorePatterns": [
     "node_modules/(?!((jest-)?react-native(-.*)?|@react-native(- 
     community)?)/)"
    ]

有官方来源吗?是否保证所有匹配的软件包都需要转换?或者不忽略它们没有任何副作用吗? - friederbluemle

1

我遇到了同样的问题。上面的解决方案对我不起作用。

jest.config.js

module.exports = {
  preset: '@testing-library/react-native',
  setupFilesAfterEnv: ['@testing-library/jest-native/extend-expect'],
  transformIgnorePatterns: [
    'node_modules/(?!((jest-)?react-native(-.*)?|@react-native(-community)?)/)',
  ],
  setupFiles: [
    './node_modules/react-native-gesture-handler/jestSetup.js',
    '<rootDir>/jest.setup.js',
  ],
  moduleNameMapper: {
    '\\.svg': '<rootDir>/__mocks__/svgMock.js',
  },
  collectCoverage: false,
  coverageDirectory: '__coverage__',
  coveragePathIgnorePatterns: ['/node_modules/', '.*.svg', '.*.png'],
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接