javascript - Jest 在 react-native 中遇到了意外的标记

标签 javascript typescript react-native jestjs

所以我正在尝试使用 Jest 和 TypeScript 在我的 React Native 应用程序上编写测试。虽然使用旧的 babel 版本一切正常,但由于一些项目问题,我们不得不将 babel 升级到 7.0.0。在那之后我无法让它工作。感谢任何帮助

Jest 遇到了意外的 token 这通常意味着您正在尝试导入 Jest 无法解析的文件,例如它不是纯 JavaScript。 默认情况下,如果 Jest 看到 Babel 配置,它将使用它来转换您的文件,忽略“node_modules”。

/home/levan/work/vabaco-dhp-frontend/packages/dhp-mobile-app/node_modules/react-native-calendar-events/index.ios.js:3 从 'react-native' 导入 { NativeModules };

语法错误:意外的 token 导入

包.json:

"dependencies": {
    "react": "16.4.1",
    "react-native": "0.56.0",
    "react-native-calendar-events": "^1.6.1",
    "react-redux": "^5.0.7",
    "react-router": "^4.3.1",
    "react-router-native": "^4.3.0",
    "react-router-redux": "5.0.0-alpha.9",
    "redux": "^4.0.0",
    "redux-api-middleware": "^2.3.0",
    "redux-form": "^7.4.2",
    "redux-thunk": "^2.3.0",
    "urijs": "^1.19.1"
  },
  "devDependencies": {
    "@babel/core": "^7.0.0",
    "@babel/preset-env": "^7.0.0",
    "@types/history": "^4.7.0",
    "@types/jest": "^23.3.1",
    "@types/react": "^16.4.13",
    "@types/react-native": "^0.56.17",
    "@types/react-router": "^4.0.30",
    "@types/react-router-native": "^4.2.3",
    "babel-core": "^7.0.0-bridge.0",
    "babel-jest": "^23.4.2",
    "babel-loader": "^8.0.2",
    "babel-preset-react-native": "^5.0.0",
    "jest": "^23.5.0",
    "react-native-typescript-transformer": "^1.2.10",
    "react-test-renderer": "^16.4.2",
    "ts-jest": "^23.1.4",
    "typescript": "^3.0.3"
},


"jest": {
    "preset": "react-native",
    "transform": {
      "^.+\\.ts?$": "ts-jest",
      "^.+\\.tsx?$": "ts-jest",
      "^.+\\.js$": "babel-jest"
    },
    "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)?$",
    "moduleFileExtensions": [
      "ts",
      "tsx",
      "js",
      "jsx",
      "json",
      "node"
    ],
    "moduleNameMapper": {
      "^.+\\.(css|less|scss)$": "identity-obj-proxy"
    },
    "transformIgnorePatterns": [
      "/node_modules/(?!(react-native|my-project|react-native-button|react-native-calendar-events)/)"
    ]
  }

babelrc:

{
  "presets": ["react-native", ["@babel/preset-env", {"modules": "commonjs"}]],
  "env": {
    "test": {
      "presets": ["react-native", ["@babel/preset-env"]]
    }
  }
}

最佳答案

找到解决方案。在转换中,你应该使用 react-native/jest/preprocessor.js 而不是 babel-jest。

"jest": {
    "preset": "react-native",
    "moduleDirectories": [
      "node_modules",
      "src"
    ],
    "transform": {
      "^.+\\.ts?$": "ts-jest",
      "^.+\\.tsx?$": "ts-jest",
      "^.+\\.js$": "<rootDir>/node_modules/react-native/jest/preprocessor.js" <--- over here
    },
    "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)?$",
    "moduleFileExtensions": [
      "ts",
      "tsx",
      "js",
      "jsx",
      "json",
      "node"
    ],
    "moduleNameMapper": {
      "^.+\\.(css|less|scss)$": "identity-obj-proxy"
    },
    "transformIgnorePatterns": []
}

关于javascript - Jest 在 react-native 中遇到了意外的标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52188246/

相关文章:

javascript - 如何使用 jQuery/jQueryUi 根据从日出到日落的时间更改背景颜色?

javascript - 使用 typescript ENUM 动态传递 props

css - 将 onHover 样式应用于 MuiButton 中的元素

javascript - React Native - 根据动态状态获取 json 的值

android - java.lang.RuntimeException : Cannot start "jarsigner" process, 请将其添加到 PATH

javascript - 如何在没有外部库的情况下以 Polymer 方式处理悬停?

javascript - 页面内容无法加载并且未捕获语法错误 : Unexpected token ;

android - 如何将进度条置于屏幕中央并在 native react 中删除警告消息

javascript - 如何点击jquery中的某个元素

angular - 抽象组件 Angular 2