Ошибка при запуске jest в приложении реагировать на нативный + машинопись (Jest обнаружил неожиданный токен) - PullRequest
2 голосов
/ 26 мая 2019

Кажется, что у всех и их матери есть проблема этой проблемы.Ничего не сработало из всего, что я пробовал, из всех вопросов SO и билетов GH.

На самом деле все должно быть довольно просто, поскольку мой проект в значительной степени является новым проектом barebone.Тем не менее, я до сих пор не могу понять, что не подходит для моей жизни.

Когда я запускаю jest:

/Desktop/Dropbox/Programming/iphone-app/fe/App.spec.tsx:11
    const tree = react_test_renderer_1.default.create(<App_1.default />).toJSON();
                                                      ^

SyntaxError: Unexpected token <

Мои файлы конфигурации:

// jest.config.js

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
};

-

// tsconfig.json

{
    "compilerOptions": {
        "allowJs": false,
        "allowSyntheticDefaultImports": true,
        "noFallthroughCasesInSwitch": true,
        "experimentalDecorators": true,
        "esModuleInterop": true,
        "isolatedModules": true,
        "jsx": "react-native",
        "lib": [
            "es6"
        ],
        "moduleResolution": "node",
        "noEmit": true,
        "strict": true,
        "target": "esnext"
    },
    "exclude": [
        "node_modules"
    ]
}

-

// babel.config.js

module.exports = function (api) {
    api.cache(true);
    return {
        presets: ['babel-preset-expo'],
    };
};

РЕДАКТИРОВАТЬ # 1

Просто чтобы прояснить ситуацию, я попытался использовать react-nativeпредустановка в файле конфигурации jest, но безуспешно (та же ошибка):

// jest.config.js

module.exports = {
    preset: 'react-native',
    transform: {
        '^.+\\.js$': '<rootDir>/node_modules/react-native/jest/preprocessor.js',
        '^.+\\.tsx?$': 'ts-jest'
    },
    globals: {
        'ts-jest': {
            tsConfig: 'tsconfig.json'
        }
    },
    testEnvironment: 'node',
};

Ответы [ 2 ]

3 голосов
/ 15 июня 2019

Он работает с этим конфигурационным файлом:

const { defaults } = require('jest-config');

module.exports = {
    preset: 'react-native',
    transform: {
        '^.+\\.js$': '<rootDir>/node_modules/react-native/jest/preprocessor.js',
        '^.+\\.tsx?$': 'ts-jest'
    },
    moduleFileExtensions: [
        'tsx',
        ...defaults.moduleFileExtensions
    ],
};

Мне нужно было добавить

...
moduleFileExtensions: [
    'tsx',
    ...defaults.moduleFileExtensions
],
...

В противном случае import App from './App'; в моем тесте разрешит другой файл.Добавив tsx в качестве наивысшего приоритета в опции moduleFileExtensions, приложение разрешает правильный файл.

Также для параметра компилятора jsx в tsconfig.json необходимо установить значение "jsx": "react".Я не уверен, почему я пока не могу установить react-native, но на данный момент все работает.

РЕДАКТИРОВАТЬ

'^.+\\.js$': '<rootDir>/node_modules/react-native/jest/preprocessor.js' неттребуется в новых версиях react-native. Сохранение может также вызвать проблемы.

0 голосов
/ 14 июня 2019

Я думаю, проблемы открываются и закрываются.Можете ли вы попробовать отредактировать ваш код следующим образом?

import 'react-native'
import renderer from 'react-test-renderer'
import { App } from './app'
import React from 'react'

test('renders correctly', () => {
  const tree = renderer.create(
    <App />
  )
  expect(tree).toBeDefined()
})
...