Javascript 如何停止对节点模块中的流类型进行React本机测试?

Javascript 如何停止对节点模块中的流类型进行React本机测试?,javascript,react-native,meteor,jestjs,babeljs,Javascript,React Native,Meteor,Jestjs,Babeljs,我正在尝试在现有的React原生项目上设置测试。当我使用Jest运行测试时,测试会出现以下错误: Test suite failed to run ...etc/__app__/node_modules/react-native/Libraries/polyfills/error-guard.js:14 type ErrorHandler = (error: mixed, isFatal: boolean) => void; ^^^^^^^^^^^^

我正在尝试在现有的React原生项目上设置测试。当我使用Jest运行测试时,测试会出现以下错误:

Test suite failed to run

   ...etc/__app__/node_modules/react-native/Libraries/polyfills/error-guard.js:14
    type ErrorHandler = (error: mixed, isFatal: boolean) => void;
         ^^^^^^^^^^^^

    SyntaxError: Unexpected identifier
      at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:537:17)
      at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:579:25)
      at Object.<anonymous> (node_modules/react-native/jest/setup.js:16:6)

我猜测这个问题与分离有关

节点_模块中的代码中包含Flowtype语法。我的Babel配置适用于我自己的代码,但不适用于node_模块中的文件

My babel.config.js:

  presets: ['module:metro-react-native-babel-preset', "@babel/preset-flow", "@babel/plugin-transform-flow-strip-types"],
};
My Jest package.json:

"jest": {
    "verbose": true,
    "preset": "react-native",
    "transformIgnorePatterns": [
      "node_modules/(?!react-native|@tableflip/react-native-navbar)",
      "/node_modules/(?!@babel/runtime)",
      "node_modules/(?!(react-native|__app__|react-native-button)/)",
      "/node_modules/(?!react-native)/.+"

    ],
    "setupFilesAfterEnv": [
      "<rootDir>/node_modules/riteway-jest/src/riteway-jest.js"
    ]
  },
“开玩笑”:{
“详细”:正确,
“预设”:“反应本机”,
“transformIgnorePatterns”:[
“节点_模块/(?!react native |@tableflip/react native navbar)”,
“/node_modules/(?!@babel/runtime)”,
“节点模块/(?!(反应本机| | |应用程序|反应本机按钮)/)”,
“/node_modules/(?!react native)/。+”
],
“SetupFileAfterEnv”:[
“/node\u modules/riteway jest/src/riteway jest.js”
]
},
如何停止对节点模块中的流类型进行大量测试

编辑:Full package.JSON

{
  "name": "ReactNativeTest",

  "scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start",
    "start:ios": "react-native run-ios && react-native log-ios",
    "start:android": "react-native run-android && react-native log-android",
    "start:ios:debug": "react-native run-ios --simulator=\"iPhone X\" & open \"rndebugger://set-debugger-loc?host=localhost&port=8081\"",
    "start:android:debug": "react-native run-android & open \"rndebugger://set-debugger-loc?host=localhost&port=8081\"",
    "start:debug": "open \"rndebugger://set-debugger-loc?host=localhost&port=8081\"",
    "lint": "standard",
    "test": "jest"
  },
  "dependencies": {
    "@babel/preset-env": "^7.8.4",
    "@babel/runtime": "7.0.0-beta.55",
    "@expo/react-native-action-sheet": "3.4.0",
    "@react-native-community/async-storage": "1.6.3",
    "@react-native-community/netinfo": "4.6.1",
    "@react-native-community/viewpager": "3.3.0",
    "babel-core": "^7.0.0-bridge.0",
    "babel-preset-react-app": "^7.0.0",
    "ejson": "2.2.0",
    "lodash-es": "4.17.15",
    "lodash.isstring": "4.0.1",
    "markdown-it": "10.0.0",
    "meteor-standalone-random": "1.0.67",
    "moment": "2.24.0",
    "prop-types": "15.7.2",
    "react": "16.12.0",
    "react-native": "0.61.5",
    "react-native-calendar-events": "1.7.3",
    "react-native-config": "0.11.7",
    "react-native-dismiss-keyboard": "1.0.0",
    "react-native-firebase": "5.6.0",
    "react-native-hyperlink": "0.0.16",
    "react-native-image-picker": "1.1.0",
    "react-native-iphone-x-helper": "1.2.1",
    "react-native-joi": "0.0.5",
    "react-native-keyboard-aware-scroll-view": "0.9.1",
    "react-native-keyboard-spacer": "0.4.1",
    "react-native-maps": "0.26.1",
    "react-native-onesignal": "3.5.0",
    "react-native-scrollable-tab-view": "1.0.0",
    "react-native-select-multiple": "2.1.0",
    "react-native-side-menu": "1.1.3",
    "react-native-swiper": "1.5.14",
    "react-native-thumbnail-video": "0.1.2",
    "react-native-touch-id": "4.4.1",
    "react-native-uploadcare-image": "2.0.0",
    "react-native-video": "5.0.2",
    "react-native-webview": "7.5.2",
    "react-redux": "7.1.3",
    "reduce-reducers": "1.0.4",
    "redux": "4.0.4",
    "redux-devtools-extension": "2.13.8",
    "redux-localstorage": "github:tableflip/redux-localstorage#fix-buffer-main-src",
    "redux-localstorage-filter": "0.1.1",
    "redux-thunk": "2.3.0",
    "url": "0.11.0",
    "uuid": "3.3.3"
  },
  "jest": {
    "verbose": true,
    "preset": "react-native",
    "transformIgnorePatterns": [
      "<rootDir>/node_modules/(?!@babel/runtime)",
      "<rootDir>node_modules/(?!(react-native|__app__|react-native-button)/)",
      "/node_modules/(?!react-native)/.+",
      "/node_modules/"
    ],
    "setupFilesAfterEnv": [
      "<rootDir>/src/riteway-jest.js"
    ]
  },
  "devDependencies": {
    "@babel/core": "^7.7.4",
    "@babel/plugin-transform-flow-strip-types": "^7.8.3",
    "@babel/plugin-transform-runtime": "^7.8.3",
    "@babel/preset-flow": "^7.8.3",
    "babel-eslint": "10.0.3",
    "babel-jest": "^24.9.0",
    "babel-plugin-import-rename": "1.0.1",
    "jest": "24.9.0",
    "jetifier": "1.6.4",
    "metro-react-native-babel-preset": "0.57.0",
    "react-native-config-node": "0.0.2",
    "react-test-renderer": "16.12.0",
    "redux-mock-store": "1.5.3",
    "riteway-jest": "^2.0.2",
    "standard": "14.3.1"
  },
  "standard": {
    "parser": "babel-eslint",
    "globals": [
      "fetch",
      "FormData",
      "it",
      "expect"
    ]
  },
  "transform": {
    "^.+\\.[t|j]sx?$": "babel-jest"
  }
}

{
“名称”:“ReactNativeTest”,
“脚本”:{
“开始”:“node node_modules/react native/local cli/cli.js start”,
“开始:ios”:“反应本机运行ios和反应本机日志ios”,
“开始:android”:“反应本机运行android和反应本机日志android”,
“开始:ios:debug”:“react native run ios--simulator=\“iphonex\”和“open\”rndebugger://set-debugger-loc?host=localhost&port=8081\"",
“开始:安卓:调试”:“反应本机运行安卓&打开\”rndebugger://set-debugger-loc?host=localhost&port=8081\"",
“开始:调试”:“打开\”rndebugger://set-debugger-loc?host=localhost&port=8081\"",
“皮棉”:“标准”,
“测试”:“开玩笑”
},
“依赖项”:{
“@babel/preset env”:“^7.8.4”,
“@babel/runtime”:“7.0.0-beta.55”,
“@expo/react本机操作表”:“3.4.0”,
“@react本机社区/异步存储”:“1.6.3”,
“@react native community/netinfo”:“4.6.1”,
“@react native community/viewpager”:“3.3.0”,
“巴别塔核心”:“^7.0.0-bridge.0”,
“巴别塔预设反应应用程序”:“^7.0.0”,
“ejson”:“2.2.0”,
“lodash es”:“4.17.15”,
“lodash.isstring”:“4.0.1”,
“降价”:“10.0.0”,
“流星独立随机”:“1.0.67”,
“时刻”:“2.24.0”,
“道具类型”:“15.7.2”,
“反应”:“16.12.0”,
“反应本机”:“0.61.5”,
“反应本机日历事件”:“1.7.3”,
“反应本机配置”:“0.11.7”,
“反应本机键盘”:“1.0.0”,
“react native firebase”:“5.6.0”,
“反应本机超链接”:“0.0.16”,
“react本机映像选择器”:“1.1.0”,
“react-native-iphone-x-helper”:“1.2.1”,
“反应本机joi”:“0.0.5”,
“react本机键盘感知滚动视图”:“0.9.1”,
“react本机键盘间隔符”:“0.4.1”,
“反应本机映射”:“0.26.1”,
“react native onesignal”:“3.5.0”,
“react本机可滚动选项卡视图”:“1.0.0”,
“反应本机选择多个”:“2.1.0”,
“反应本机端菜单”:“1.1.3”,
“react native swiper”:“1.5.14”,
“react原生缩略图视频”:“0.1.2”,
“react native touch id”:“4.4.1”,
“react native uploadcare映像”:“2.0.0”,
“react原生视频”:“5.0.2”,
“react native webview”:“7.5.2”,
“react redux”:“7.1.3”,
“还原还原剂”:“1.0.4”,
“redux”:“4.0.4”,
“redux开发工具扩展”:“2.13.8”,
“redux localstorage”:“github:tableflip/redux localstorage#修复缓冲区主src”,
“redux localstorage筛选器”:“0.1.1”,
“redux thunk”:“2.3.0”,
“url”:“0.11.0”,
“uuid”:“3.3.3”
},
“笑话”:{
“详细”:正确,
“预设”:“反应本机”,
“transformIgnorePatterns”:[
“/node_modules/(?!@babel/runtime)”,
“节点模块/(?!(反应本机| | |应用程序|反应本机按钮)/)”,
“/node_modules/(?!react native)/.+”,
“/node_modules/”
],
“SetupFileAfterEnv”:[
“/src/riteway jest.js”
]
},
“依赖性”:{
“@babel/core”:“^7.7.4”,
“@babel/plugin转换流条类型”:“^7.8.3”,
“@babel/plugin转换运行时”:“^7.8.3”,
“@babel/预设流”:“^7.8.3”,
“babel eslint”:“10.0.3”,
“巴别塔笑话”:“^24.9.0”,
“巴别塔插件导入重命名”:“1.0.1”,
“笑话”:“24.9.0”,
“jetifier”:“1.6.4”,
“metro react native babel预设”:“0.57.0”,
“反应本机配置节点”:“0.0.2”,
“反应测试渲染器”:“16.12.0”,
“redux模拟商店”:“1.5.3”,
“riteway玩笑”:“^2.0.2”,
“标准”:“14.3.1”
},
“标准”:{
“解析器”:“babel eslint”,
“全球”:[
“取回”,
“FormData”,
“它”,
“期望”
]
},
“转变”:{
“^.+\[t|j]sx?$”:“巴别塔笑话”
}
}

package.json中的transformIgnorePatterns存在问题。 不必在这个列表中添加项目数量,只需按照此模式添加 模块被列入黑名单

"transformIgnorePatterns": [
      "node_modules/(?!MODULE_NAME_1|MODULE_NAME_2)/"
    ], 
由于您的错误,我们需要将react native添加到transformIgnorePatterns。实际上,我们需要在黑名单中添加所有抛出错误的模块,因为大多数模块都不是完全用JS编写的

最后,在我的例子中,package.json中的jest

"jest": {
    "preset": "react-native",
    "transformIgnorePatterns": [
      "node_modules/(?!react-native-payfort-sdk|react-native)/"
    ],
    "globals": {
      "__DEV__": true
    },
    "testEnvironment": "node"
  }

这对我很有效,希望这也能帮助你。

巴贝尔可能需要相应的预设。如果您不在Expo,
npm安装--保存dev metro react native babel预置
,并将其插入您的
babel.config.js

module.exports = {
  presets: ['module:metro-react-native-babel-preset'],
};

在我的例子中,我需要将@react native with'@'添加到transformIgnorePatterns中,如下所示:

"transformIgnorePatterns": [
  "node_modules/(?!(@react-native|react-native)/)"
]

首先,我们需要了解什么是根本原因

SyntaxError: Unexpected identifier
基本上,这些类型的错误都是由于jest配置引起的。如果指示您转换节点_模块内的所有库,则会引发这些类型的错误。 因此,请继续检查package.json jest配置中的以下语句

transformIgnorePatterns
上面使用的是添加一些转换忽略模式,它将具有此默认正则表达式模式=>
[“/node\u modules/”,“\\.p
transformIgnorePatterns
"transformIgnorePatterns": [
  "node_modules/(?!(@react-native|react-native)/)"
]