React Native - Jest: сломано с момента обновления до 0.56. Как это исправить? - PullRequest
0 голосов
/ 05 июля 2018

С момента обновления до новой версии React Native мои тесты не пройдены.

Окружающая среда

Вот мое окружение:

React Native Environment Info:
System:
  OS: macOS High Sierra 10.13.4
  CPU: x64 Intel(R) Core(TM) i7-7920HQ CPU @ 3.10GHz
  Memory: 486.81 MB / 16.00 GB

  Shell: 3.2.57 - /bin/bash
Binaries:
  Node: 9.4.0 - /usr/local/bin/node
  npm: 6.1.0 - /usr/local/bin/npm
  Watchman: 4.9.0 - /usr/local/bin/watchman
SDKs:
  iOS SDK:
    Platforms: iOS 11.4, macOS 10.13, tvOS 11.4, watchOS 4.3
IDEs:
  Android Studio: 3.1 AI-173.4697961
  Xcode: 9.4.1/9F2000 - /usr/bin/xcodebuild
npmPackages:
  react: 16.4.1 => 16.4.1
  react-native: 0.56.0 => 0.56.0
npmGlobalPackages:
  create-react-native-app: 1.0.0
  react-native-cli: 2.0.1
  react-native-git-upgrade: 0.2.7

Описание

При попытке проверить моих вновь созданных создателей действий npm test выдает следующую ошибку:

jest

 FAIL  app/actions/logout/logout.test.js
  ● Test suite failed to run


    Plugin 0 specified in "/Users/jan/Startup/react-native/ordersome/node_modules/babel-preset-react-native/index.js" provided an invalid
property of "default" (While processing preset: "/Users/jan/Startup/react-native/ordersome/node_modules/babel-preset-react-native/index.js
")

      at Plugin.init (node_modules/babel-core/lib/transformation/plugin.js:131:13)
      at Function.normalisePlugin (node_modules/babel-core/lib/transformation/file/options/option-manager.js:152:12)
      at node_modules/babel-core/lib/transformation/file/options/option-manager.js:184:30
          at Array.map (<anonymous>)
      at Function.normalisePlugins (node_modules/babel-core/lib/transformation/file/options/option-manager.js:158:20)
      at OptionManager.mergeOptions (node_modules/babel-core/lib/transformation/file/options/option-manager.js:234:36)
      at node_modules/babel-core/lib/transformation/file/options/option-manager.js:265:14
      at node_modules/babel-core/lib/transformation/file/options/option-manager.js:323:22
          at Array.map (<anonymous>)
      at OptionManager.resolvePresets (node_modules/babel-core/lib/transformation/file/options/option-manager.js:275:20)

Я много гуглил и не могу найти решение. Похоже, это как-то связано с Бабелем.

Воспроизводимая демоверсия

Это легко воспроизвести (в настоящее время). Я попытался начать новый проект, используя react-native init. Затем я просто создал случайный файл .test.js и записал в него тестовую документацию по началу работы:

function sum(a, b) {
  return a + b;
}

test("adds 1 + 2 to equal 3", () => {
  expect(sum(1, 2)).toBe(3);
});

Затем я запускаю 'npm test', и выдает ошибку выше.

Ответы [ 4 ]

0 голосов
/ 23 августа 2018

У меня была такая же ошибка, а также я добавил:

"transform": {
      "^.+\\.js$": "<rootDir>/node_modules/react-native/jest/preprocessor.js"
    }

Но потом я получил еще одну ошибку в другом модуле, и чтобы ее игнорировать, нужно добавить этот код в файл setup.jest.js:

jest.mock('react-native-router-flux', () => {
    return {
        Crashlytics: {
            crash: () => {},
        },
        Answers: {
            logCustom: () => {},
            logContentView: () => {},
        },
    }

Таким образом, после этого кода jest будет игнорировать ошибку в модуле "act-native-router-flux "в ваших тестах.

0 голосов
/ 07 июля 2018

Вот как я это исправил.

Добавить

"@babel/core": "^7.0.0-beta.47",
"babel-core": "^7.0.0-beta.47",

на ваш package.json и запустите npm install. Это исправило это для меня.

Кроме того, для фермента вам нужно будет добавить

   "transform": {
      "^.+\\.js$": "<rootDir>/node_modules/react-native/jest/preprocessor.js"
    }

вам шут конфиг в вашем package.json.

Если вы хотите увидеть более подробное исправление, ознакомьтесь с этой проблемой github.

0 голосов
/ 24 июля 2018

@ J. Решение Hesters является почти правильным. Но не обязательно устанавливать babel, просто добавление преобразования решает проблему.

{
  ...
  "jest": {
    "preset": "react-native",
    "transform": {
      "^.+\\.js$": "<rootDir>/node_modules/react-native/jest/preprocessor.js"
    }
  }
  ...
}

Мой предыдущий ответ имеет некоторые побочные эффекты, которых я не видел до тех пор, пока не попытался перестроить все реактивное приложение. Поэтому, пожалуйста, не используйте его.

ПРЕДЫДУЩИЙ ОТВЕТ

на самом деле не имеет ничего общего с реагирующим родным 0,56. вызвано пресетами babel 5, просто верните этот пакет, чтобы добиться цели.

yarn add babel-preset-react-native@4.0.0

0 голосов
/ 06 июля 2018

Проблема с 0.56.0.

Единственное решение - запустить его с v0.55.4

либо установите v0.55.4: npm i --save react-native@0.55.4

или при запуске приложения: react-native run-android --version 0.55.4

Это помогло мне, надеюсь, это поможет

...