Настройка Jest в react-native - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь настроить проект, ориентированный на реакцию, с expo (v38) и typescript (v3.9.4). Возникли проблемы с настройкой тестирования, в частности jest.

Итак, я следил за курсом тестирования javascript и настраивал аналогичные ему (если это вообще помогает с контекстом), поэтому я пытаюсь чтобы настроить линтинг для запуска через projects в конфигурации jest через jest-runner-eslint, вот полная конфигурация в его нынешнем виде:

module.exports = {
  preset: '@testing-library/react-native',
  transform: {
    '^.+\\.js$': '<rootDir>/node_modules/react-native/jest/preprocessor.js',
    '\\.(ts|tsx)$': 'babel-jest',
    '^.+\\.(ts|tsx)?$': '<rootDir>/jest-preprocess.js',
  },
  transformIgnorePatterns: [
    'node_modules/(?!(react-native|@sentry/react-native||@react-native-community/async-storage|react-native-iphone-x-helper)|react-native-gesture-handler|@react-native-community/masked-view|@react-navigation/stack|tipsi-stripe/)',
  ],
  moduleFileExtensions: ['ts', 'tsx', 'js'],
  moduleNameMapper: {
    '^src/(.*)$': '<rootDir>/src/$1',
  },
  testRegex: '(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$',
  timers: 'fake',
  testEnvironment: 'jsdom',
  projects: [
    {
      displayName: 'clientTest',
      testMatch: ['<rootDir>/src/__tests__/**/*.tsx'],
      testEnvironment: 'jest-environment-jsdom',
      setupFilesAfterEnv: ['<rootDir>/jest-setup.js'],
    },
    {
      runner: 'jest-runner-eslint',
      displayName: 'lint',
      testMatch: ['<rootDir>/src/**/*.tsx'],
    },
  ],
};

Итак, если я закомментирую настройки проектов, мой тест будет работать нормально . Когда я снова включаю только проект линтинга, он запускает их без ошибок, но, конечно же, без тестов. Я не могу включить проект clientTest без этой ошибки:

    /Users/ko/git/punchline/node_modules/react-native/Libraries/ReactNative/AppContainer.js:22
    type Context = {rootTag: number, ...};
         ^^^^^^^

    SyntaxError: Unexpected identifier

      at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1258:14)
      at Object.<anonymous> (node_modules/@testing-library/react-native/dist/index.js:37:44)

Я пробовал множество вариантов конфигурации (их слишком много, чтобы перечислить кратко), я пробовал настраивать transformIgnorePatterns, настраивая разные предустановки, и с использованием разных предустановок babel, из которых мой текущий babel.config. js:

module.exports = function (api) {
  api.cache(true);
  return {
    presets: [
      ['@babel/preset-env', { targets: { node: 'current' } }],
      '@babel/preset-react',
      'babel-preset-expo',
      '@babel/preset-typescript',
      'module:metro-react-native-babel-preset',
    ],
  };
};

Любые указатели на то, где мне нужно go, чтобы все было правильно транспилировано? Мне просто кажется странным, что тесты работают, если в jest.config. js не определен проект (но тогда он не будет запускать eslint, и в конечном итоге у меня будет конфигурация сервера, которая будет запускаться node, поэтому я хочу, чтобы это работало и через проекты).

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