Как избавиться от SyntaxError: Unexpected Token {при попытке протестировать React-Native с помощью Mapbox в Jest? - PullRequest
1 голос
/ 26 сентября 2019

Я попробовал довольно много вариантов, но безуспешно.

Ситуация: я хочу сделать приложение React Native с картой Mapbox внутри моих Jest-тестов, чтобы я мог протестироватьЛогика, которую мы написали вокруг него.

Мне удалось воспроизвести ошибку, которую я вижу в мини-репо: https://github.com/JKowalsky/mapbox-error-test-repo/tree/master

Мини-репо - это реактивный проект init-default по умолчанию, которыйвключает Mapbox и устанавливает токен доступа, просто чтобы мы могли поиграть с зависимостью.

import MapboxGL from '@react-native-mapbox-gl/maps';
MapboxGL.setAccessToken('fakeyfakeytokentoken');

Я бы ожидал, что значение по умолчанию __test__/App-test.js все еще будет работать, но оно не сработает на включении Mapbox.Это выглядело как проблема Babel, поэтому я настроил следующий файл babel.config.js;

module.exports = function(api) {
    api.cache(true);
    return {
        presets: [
            'module:metro-react-native-babel-preset',
            "@babel/preset-env",
            "@babel/preset-flow"
        ],
        plugins: [
            "@babel/plugin-proposal-class-properties",
            "@babel/plugin-syntax-dynamic-import"
        ]
    };
};

И вот для этого выполните package.json:

{
  "name": "mapboxerror",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "android": "react-native run-android",
    "ios": "react-native run-ios",
    "start": "react-native start",
    "test": "jest --no-cache",
    "lint": "eslint ."
  },
  "dependencies": {
    "@mapbox/geo-viewport": "^0.4.0",
    "@react-native-mapbox-gl/maps": "^7.0.6",
    "jsdom": "^15.1.1",
    "mapbox": "^1.0.0-beta10",
    "react": "16.9.0",
    "react-native": "0.61.1"
  },
  "devDependencies": {
    "@babel/core": "^7.6.2",
    "@babel/plugin-proposal-class-properties": "^7.5.5",
    "@babel/plugin-syntax-dynamic-import": "^7.2.0",
    "@babel/preset-env": "^7.6.2",
    "@babel/preset-flow": "^7.0.0",
    "@babel/runtime": "^7.6.2",
    "@react-native-community/eslint-config": "^0.0.5",
    "babel-jest": "^24.9.0",
    "eslint": "^6.4.0",
    "jest": "^24.9.0",
    "metro-react-native-babel-preset": "^0.56.0",
    "react-test-renderer": "16.9.0"
  },
  "jest": {
    "preset": "react-native"
  }
}

Я все еще получаюнеожиданная ошибка токена:

/Users/jennifer/dev/mapbox-error-test-repo/node_modules/@react-native-mapbox-gl/maps/javascript/index.js:1
    ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import {Animated, NativeModules, PermissionsAndroid} from 'react-native';

   SyntaxError: Unexpected token {

      25 | } from 'react-native/Libraries/NewAppScreen';
      26 |
    > 27 | import MapboxGL from '@react-native-mapbox-gl/maps';
         | ^
      28 | MapboxGL.setAccessToken('fakeyfakeytokentoken');
      29 |
      30 | const App: () => React$Node = () => {

      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> (App.js:27:1)

Последнее любопытство: я добавил преобразование в конфигурацию jest в package.json, но затем выдает ошибку типа (это не проект машинописного текста).

"jest": {
    "preset": "react-native",
    "transformIgnorePatterns": [
      "node_modules/(?!(mapbox-gl|mapbox|@react-native-mapbox-gl))/"
    ]
  }

Это приводит меня к еще более непостижимой ошибке:

yarn run v1.16.0
$ jest --no-cache
 FAIL  __tests__/App-test.js
  ● Test suite failed to run

    TypeError: (0 , _typeof4.default) is not a function

      at _typeof2 (node_modules/@babel/runtime/helpers/typeof.js:8:63)
      at _typeof (node_modules/@babel/runtime/helpers/typeof.js:22:39)
      at new Promise (node_modules/promise/lib/core.js:44:31)
      at valuePromise (node_modules/promise/lib/es6-extensions.js:18:11)
      at Object.<anonymous> (node_modules/promise/lib/es6-extensions.js:10:12)
      at Object.<anonymous> (node_modules/promise/lib/index.js:9:1)

Test Suites: 1 failed, 1 total
Tests:       0 total
Snapshots:   0 total
Time:        1.192s
Ran all test suites.
error Command failed with exit code 1.

Есть какие-нибудь подсказки?Я уже давно обхожусь с этой проблемой, и у Mapbox нет тонны поддержки инфраструктуры тестирования.

1 Ответ

0 голосов
/ 27 сентября 2019

Хорошо, мне действительно удалось заставить это работать.Мне пришлось смоделировать зависимости Eventbox от Mapbox-gl и response-native в дополнение к добавлению тонны вавилонских преобразований.Связанный репозиторий был обновлен и теперь проходит модульный тест.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...