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