#reactjs #typescript #jestjs
#reactjs #typescript #jestjs
Вопрос:
У меня есть проект React с использованием TypeScript, и в основном файле tsx import React from 'react'
строка работает нормально. Однако в моем тестовом файле он все еще вызывает ошибку TS1259. Я предполагаю, что в моей конфигурации TS / Jest / Babel есть что-то странное, но, похоже, не могу это определить.
Кто-нибудь знает, в чем проблема?
tsconfig.json
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"target": "ES2019",
"moduleResolution": "node",
"module": "ESNext",
"allowJs": true,
"noEmit": true,
"strict": true,
"isolatedModules": true,
"esModuleInterop": true,
"strictNullChecks": true,
"jsx": "react",
"baseUrl": "./",
"types": []
},
"include": [
"index.d.ts",
"src/*.ts",
"src/*.tsx",
"src/**/*.ts",
"src/**/*.tsx"
]
}
jest.config.js
module.exports = {
collectCoverageFrom: ['src/**/*.{ts,tsx}', '!src/index.ts'],
moduleNameMapper: {'^. \.s?css$': 'identity-obj-proxy'},
transform: {'^. \.tsx?$': 'babel-jest'},
testRegex: '/__tests__/.*\.test\.tsx?$',
testURL: 'http://localhost',
setupFilesAfterEnv: ['<rootDir>/__tests__/setup.ts'],
setupFiles: [],
testPathIgnorePatterns: [
'__snapshots__',
'__mocks__',
'<rootDir>/scripts',
],
};
Сообщение об ошибке в тестовом файле Jest
Нет ошибки в файле основного компонента
Комментарии:
1. Это произойдет, если ваш тест исключен
tsconfig.json
, но, похоже, это не так. Вероятно, ваша среда РАЗРАБОТКИ что-то недопонимает. Запустите./node_modules/.bin/tsc --noEmit
из командной строки, чтобы выполнить проверку типа.2. На самом деле, наших тестов нет в
src
папке, поэтому ваше предложение оказалось на 100% правильным. Не могли бы вы опубликовать его в качестве ответа, чтобы я мог пометить его как решение? Я знал, что это будет какая-то обыденная деталь (разве я не всегда?). Спасибо!3. Рад, что смог помочь.
Ответ №1:
TypeScript определяет, какие файлы считаются частью вашего проекта, на основе множества параметров, указанных в вашем tsconfig.json
.
Если вы используете свойства "include"
и / или "files"
для явного указания этих файлов, только те файлы, которые соответствуют указанным в них путям и шаблонам, вместе с теми, на которые они ссылаются напрямую или транзитивно, являются частью проекта.
Любые, "compilerOptions"
например "esModuleInterop"
, применяются только к этим файлам.
Как вы указали
"include": [
"index.d.ts",
"src/*.ts",
"src/*.tsx",
"src/**/*.ts",
"src/**/*.tsx"
]
Если ваши тесты не находятся в src
каталоге, они не будут считаться частью вашего проекта, и ваши параметры компилятора не будут к ним применены.
Вы можете проверить, какие файлы включены в ваш проект в командной строке, выполнив
$ tsc --listFilesOnly
Если у вас есть несколько tsconfig
файлов, что часто бывает, особенно в новых проектах, вы также можете указать проект с помощью --project
опции
Например
$ tsc --listFilesOnly --project ./tsconfig.app.json