У меня есть проект TypeScript, и я использую Jest через ts-jest для своих тестов. В VS Code у меня установлен плагин vscode-jest. Отладка работает не совсем так, как хотелось бы:
Debug CodeLens, созданный vscode-jest.Я думаю, это из-за того, как работает ts-jest. Точка останова, вероятно, никогда не будет найдена, потому что тесты выполняются на файлах JS, а не на файлах TS.
Если я попробую сделать то же самое в проекте JS, который был загружен с помощью приложения Create React, я могу установить точки останова в исходных файлах, и отладчик остановится. Что интересно, потому что эти исходные файлы также компилируются babel ...
Интересно, можно ли настроить мою настройку так, чтобы точки останова в исходных файлах распознавались отладчиком.
Разместите ниже несколько файлов, которые могут иметь отношение к делу:
jest.config.js
module.exports = {
transform: {
'^.+\\.tsx?$': 'ts-jest',
},
testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$',
testPathIgnorePatterns: ['/dist/', '/node_modules/'],
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
collectCoverage: false,
};
tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"declaration": true,
"outDir": "./dist",
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"strictPropertyInitialization": true,
"noImplicitThis": true,
"alwaysStrict": true,
"noUnusedLocals": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"esModuleInterop": true,
"sourceMap": true,
"watch": false
},
"include": ["src"],
"compileOnSave": true
}






ммм, я в вашей ситуации, но я могу установить точки останова как в исходном, так и в тестовом коде. Обратите внимание, что даже если vscode помечает мои точки останова как «непроверенные» в исходном коде, он правильно останавливается при достижении их.
Передам вам свою конфигурацию:
tsconfig.json:
{
"compilerOptions": {
"target": "es5",
"outDir": "build",
"module": "commonjs",
"strict": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"suppressImplicitAnyIndexErrors": true,
"removeComments": true,
"allowJs": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"forceConsistentCasingInFileNames": true,
"noEmitOnError": true,
"typeRoots": [
"./node_modules/@types",
"./types"
],
"lib": [
"es5",
"es6",
"dom",
"scripthost"
],
"traceResolution": false,
"listEmittedFiles": false,
"listFiles": false,
"pretty": true,
},
"exclude": [
"node_modules/**/*.*",
"build/**/*.*"
],
"include": [
"src/**/*.ts",
"test/**/*.test.ts",
"demo/**/*.ts"
],
}
jest.config.js
module.exports = {
globals: {
'ts-jest': {
tsConfigFile: 'tsconfig.jest.json'
},
"__TRANSFORM_HTML__": true
},
moduleFileExtensions: [
'ts',
'js'
],
transform: {
"^.+\\.(ts|html)$": "ts-jest",
"^.+\\.xml$": "<rootDir>/tools/xmlTransformer.js",
},
clearMocks: true,
resetMocks: true,
restoreMocks: true,
collectCoverage: true,
"collectCoverageFrom": [
"**/src/**/*.ts"
],
coverageDirectory: 'coverage',
coverageReporters: [
'lcov'
],
// "coverageThreshold": {
// "global": {
// "branches": 80,
// "functions": 80,
// "lines": 80,
// "statements": 80
// }
// },
testEnvironment: 'jsdom',
testMatch: [
'**/test/unit/**/*.test.ts'
],
setupTestFrameworkScriptFile: 'jest-mock-console/dist/setupTestFramework.js'
};
Обновлено: как запустить шутку в режиме отладки?
Спасибо за ответ. Вполне вероятно, что причиной моей проблемы была какая-то версия зависимости. Недавно я смог пройти через все. Ваш EDIT спрашивает, как вы запускаете Jest в режиме отладки, и мой вопрос касался vscode-jest, поэтому я предполагаю, что вы хотите знать, как отлаживать с помощью этого плагина. Я делаю это, просто щелкая ссылку «Отладка», которая появляется после неудачного теста. Чтобы запустить сеанс отладки, не связанный с vscode-jest, вам нужно будет создать конфигурацию launch.json и начать с нее сеанс отладки.
ну нет, я спрашивал о запуске шутки в режиме отладки только потому, что это была та одинокая вещь, которую вы не указали, поэтому я думал о том, что чего-то не хватает в параметрах запуска шутки (как, например, параметр runInBand)
Вы заставили его работать?