Jest отказывается анализировать JSX несмотря на tsconfig, включая опцию `jsx` - PullRequest
1 голос
/ 08 марта 2019

Я пытаюсь протестировать компоненты реакции, написанные в машинописном тексте, с помощью Jest, но при запуске тестов я получаю эту ошибку:

Cannot use JSX unless the '--jsx' flag is provided.

Для этого проекта требуется несколько файлов tsconfig (один для сервера узла, а другой для исходного кода клиента), поэтому проект имеет следующую структуру:

/root
  package.json
  jest.config.js
  /src
    tsconfig.json
  /server
    tsconfig.json

В настоящее время я только пытаюсь запустить тесты в каталоге src. Я думаю, что проблема в том, что ts-jest не загружает правильный файл tsconfig, но после просмотра их документов, проблем и запросов на слабом канале, я не могу найти способ передать флаг --jsx в ts. -jest или указать используемый tsconfig.

Вот содержимое моих файлов конфигурации:

/ корень / jest.config.js

module.exports = {
  roots: [
    '<rootDir>/src',
  ],
  transform: {
    '^.+\\.tsx?$': 'ts-jest',
  },
  testRegex: '/__tests__/.*\\.test\\.tsx?$',
  moduleFileExtensions: [
    'ts',
    'tsx',
    'js',
    'jsx',
    'json',
    'node',
  ],
  setupFilesAfterEnv: ['jest-enzyme'],
  testEnvironment: 'enzyme',
};

/ корень / SRC / tsconfig.json

{
  "compilerOptions": {
    "plugins": [
      {
        "name": "typescript-styled-plugin"
      }
    ],
    "target": "es2018",
    "lib": ["es2018", "dom"],
    "jsx": "react",
    "moduleResolution": "node",
    "allowJs": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "sourceMap": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "noImplicitReturns": true,
    "outDir": "../dist/src",
    "baseUrl": ".",
    "typeRoots": ["./types", "../node_modules/@types"]
  }
}

И мои соответствующие зависимости в package.json

"@types/jest": "^24.0.10",
"@types/enzyme": "^3.9.0",
"enzyme": "^3.9.0",
"enzyme-adapter-react-16": "^1.10.0",
"jest": "^24.3.1",
"jest-environment-enzyme": "^7.0.2",
"jest-enzyme": "^7.0.2",
"ts-jest": "^24.0.0",
"ts-node": "^8.0.2",
"typescript": "^3.3.3",
"typescript-styled-plugin": "^0.13.0"

И тест, который не проходит (расположен на /root/src/pages/__tests__/index.test.tsx)

import React from 'react';
import IndexPage from '../index';
import { shallow } from 'enzyme';

describe('pages/index', () => {
  test('Should render without error', () => {
    const wrapper = shallow(<IndexPage/>);
  });
});

Что я здесь не так делаю?

EDIT:

А пока я работаю, просто переместив root/src/tsconfig.json на root/tsconfig.json. Это не сработает, если я когда-нибудь захочу добавить тесты на сервер, но я буду использовать его до тех пор, пока не появится что-то лучшее.

1 Ответ

2 голосов
/ 09 марта 2019

ts-jest будет искать <roodDir>/tsconfig.json по умолчанию.

Если вы хотите указать конкретный файл конфигурации, используйте опцию global/ts-jest/tsconfig:

//  package.json/jest or jest.config.json
{
  "globals": {
    "ts-jest": {
      "tsConfig": "<your tsconfig.json file path>"
    }
  }
}

Ссылка: https://kulshekhar.github.io/ts-jest/user/config/#options

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