Vscode-jest с точками останова ts-jest в исходных файлах машинописного текста

У меня есть проект 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
}

Вы заставили его работать?

Andrey Gordeev 13.06.2019 19:02
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
4
1
1 444
1

Ответы 1

ммм, я в вашей ситуации, но я могу установить точки останова как в исходном, так и в тестовом коде. Обратите внимание, что даже если 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 и начать с нее сеанс отладки.

Hendrik 05.09.2018 11:05

ну нет, я спрашивал о запуске шутки в режиме отладки только потому, что это была та одинокая вещь, которую вы не указали, поэтому я думал о том, что чего-то не хватает в параметрах запуска шутки (как, например, параметр runInBand)

Canemacchina 06.09.2018 12:06

Другие вопросы по теме