Я пытаюсь настроить проект, ориентированный на реакцию, с 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, поэтому я хочу, чтобы это работало и через проекты).