Как импортировать модули для использования в детоксикации - PullRequest
2 голосов
/ 22 января 2020

Опишите ошибку Я пытаюсь импортировать внешние пакеты для использования с тестовыми файлами Detox. Мой конкретный случай использования c заключается в том, что testID связан с уникальным ключом, который мне нужно извлечь из базы данных firebase. Я просматривал эти темы, документирующие подобные проблемы, но все решения, которые я пробовал, не работали для меня (большинство ответов были с 2018 года / в начале 2019 года) https://github.com/vuejs/vue-cli/issues/1584 https://github.com/facebook/jest/issues/6933

Существует ли в настоящее время консенсус в отношении наилучшего способа импорта модулей в файл test.spe c. js в стиле e2e, чтобы Detox мог использовать их в тестах?

Воспроизвести

  • [x] Я проверил эту проблему в последнем выпуске Detox, и он все еще воспроизводит

Шаги для воспроизведения : 1. добавить базу данных импорта из «@act-native-firebase / database»; в начало тестового файла 2. запустите npx response-native start & 3. запустите npx detox test - c ./e2e/test.spec.js

Конфигурация babel.config. js:

module.exports = {
  presets: [
    [
      'babel-preset-env',
      {
        targets: {
          node: 'current'
        }
      }
    ]
  ]
};

пакет. json:

{
  "name": <omitted>,
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "android": "react-native run-android",
    "ios": "react-native run-ios",
    "start": "react-native start",
    "test": "react-scripts jest",
    "lint": "eslint .",
    "preinstall": "node scripts/pre-install.js",
    "appium": "appium",
    "build:android": "scripts/build-android.sh",
    "build:ios": "scripts/build-ios.sh",
    "test:android": "appium-helper --platform android",
    "test:ios": "appium-helper --platform ios",
    "test:local-e2e": "OS=both scripts/run-local-tests.sh",
    "run-emulator:android": "scripts/run-android-emulator.sh",
    "kill-emulator:android": "scripts/kill-android-emulator.sh"
  },
  "dependencies": {
    "@react-native-firebase/app": "^6.0.2",
    "@react-native-firebase/auth": "^6.0.2",
    "@react-native-firebase/database": "^6.0.2",
    "babel-plugin-dynamic-import-node": "^2.3.0",
    "detox": "15.1.3",
    "geocodio-library-node": "^1.0.0",
    "prettier": "^1.19.1",
    "react": "16.12.0",
    "react-native": "0.61.5",
    "react-native-animatable": "^1.3.3",
    "react-native-collapsible": "^1.5.1",
    "react-native-gesture-handler": "^1.4.1",
    "react-native-reanimated": "^1.7.0",
    "react-native-screens": "^2.0.0-alpha.27",
    "react-native-segmented-control-tab": "^3.4.1",
    "react-native-testing-library": "^1.11.1",
    "react-navigation": "^4.0.10",
    "react-navigation-stack": "1.9.3"
  },
  "devDependencies": {
    "@babel/core": "^7.8.3",
    "@babel/runtime": "^7.8.3",
    "@react-native-community/eslint-config": "^0.0.6",
    "appium": "1.16.0",
    "babel-jest": "^25.1.0",
    "babel-preset-env": "1.7.0",
    "babel-preset-react-native": "4.0.1",
    "babel-preset-react-native-stage-0": "1.0.1",
    "babel-preset-stage-0": "6.24.1",
    "eslint": "^6.5.1",
    "jest": "^25.1.0",
    "metro-react-native-babel-preset": "^0.58.0",
    "prop-types": "15.7.2",
    "react-test-renderer": "16.12.0",
    "tape-async": "2.3.0",
    "tipsi-appium-helper": "3.3.0",
    "webdriverio": "5.18.6"
  },
  "jest": {
    "preset": "react-native",
    "transformIgnorePatterns": [
      "node_modules/(?!((jest-)?react-native|react-navigation|@react-navigation|@react-native-firebase.*))"
    ],
    "transform": {
      "^.+\\.js$": "babel-jest"
    },
    "setupFiles": [
      "./node_modules/react-native-gesture-handler/jestSetup.js",
      "react-native/jest/setup.js",
      "./jest/setup.js"
    ]
  },
  "detox": {
    "configurations": {...},
    "test-runner": "jest"
  }
}

Детокс устройства и подробные журналы

  ● Test suite failed to run

    Jest encountered an unexpected token

    This usually means that you are trying to import a file which Jest cannot parse, e.g. it's not plain JavaScript.

    By default, if Jest sees a Babel config, it will use that to transform your files, ignoring "node_modules".

    Here's what you can do:
     • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
     • If you need a custom transformation specify a "transform" option in your config.
     • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.

    You'll find more details and examples of these config options in the docs:
    https://jestjs.io/docs/en/configuration.html

    Details:

    .../node_modules/@react-native-firebase/database/lib/index.js:18
    import { isBoolean, isNumber, isString } from '@react-native-firebase/app/lib/common';
    ^^^^^^

    SyntaxError: Cannot use import statement outside a module

    > 1 | import database from '@react-native-firebase/database';

Среда (пожалуйста, заполните следующую информацию): - Детокс: 15.1.3 - Реактив Native: 0.61.5 - Узел: 13.5.0 - Устройство: Dell XPS 13 2019 - ОС: Arch Linux - Тестовый бегун: Шут + Жасмин

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