You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VSCode调试Next.js(Typescript)项目Jest测试断点异常求助

解决方案

1. 修正launch.json配置

你的现有skipFiles覆盖范围不足,且缺少调试必要的sourceMap相关配置,替换为以下配置:

{
  "type": "node",
  "request": "attach",
  "name": "Attach to Jest",
  "skipFiles": [
    "<node_internals>/**",
    "${workspaceFolder}/node_modules/jest*/**",
    "${workspaceFolder}/node_modules/@jest/**",
    "${workspaceFolder}/node_modules/babel*/**",
    "${workspaceFolder}/node_modules/ts-node/**"
  ],
  "port": 9229,
  "sourceMaps": true,
  "resolveSourceMapLocations": ["${workspaceFolder}/**", "!**/node_modules/**"],
  "outFiles": ["${workspaceFolder}/**/*.js.map"]
}

更推荐直接用launch模式启动调试,无需手动开启Jest的debug端口,配置如下:

{
  "type": "node",
  "request": "launch",
  "name": "Debug Jest Tests",
  "program": "${workspaceFolder}/node_modules/.bin/jest",
  "args": ["--runInBand", "--no-cache"],
  "skipFiles": [
    "<node_internals>/**",
    "${workspaceFolder}/node_modules/**/*.js"
  ],
  "sourceMaps": true,
  "console": "integratedTerminal"
}

其中--runInBand为核心参数,强制Jest单进程执行,避免子进程断点映射失败。

2. 修正jest.config.js重复配置问题

你的配置文件中重复定义了moduleNameMapper字段,后定义的别名配置会覆盖之前的样式、资源mock配置,合并两个配置即可:

module.exports = {
  collectCoverageFrom: [
    "**/*.{js,jsx,ts,tsx}",
    "!**/*.d.ts",
    "!**/node_modules/**",
  ],
  moduleNameMapper: {
    // 处理样式资源
    "^.+\\.module\\.(css|sass|scss)$": "identity-obj-proxy",
    "^.+\\.(css|sass|scss)$": "<rootDir>/__mocks__/styleMock.js",
    "^.+\\.(jpg|jpeg|png|gif|webp|svg)$": `<rootDir>/__mocks__/fileMock.js`,
    // 处理别名
    "^@api/(.*)$": "<rootDir>/pages/api/$1",
  },
  testPathIgnorePatterns: [
    "<rootDir>/node_modules/",
    "<rootDir>/.next/",
    "<rootDir>/__tests__/__utils__/",
  ],
  transform: {
    "^.+\\.(js|jsx|ts|tsx)$": ["babel-jest", { 
      presets: ["next/babel"],
      sourceMaps: "both"
    }],
  },
  transformIgnorePatterns: [
    "/node_modules/",
    "^.+\\.module\\.(css|sass|scss)$",
  ],
  setupFilesAfterEnv: ["<rootDir>/jest.setup.js"],
  modulePaths: ["<rootDir>/"],
};

3. 调整Babel配置

你当前的.babelrc重复添加了@babel/env预设,next/babel已经内置了适配的env配置,重复配置会导致编译逻辑冲突,修改为:

{
  "presets": ["next/babel"]
}

4. 临时调试优化

如果调试异步逻辑时依然跳转异常,不要使用单步跳过,直接在异步代码(如数据库连接逻辑)的下一行手动打断点,调试器会直接停在目标位置,避免经过第三方库代码。
运行测试时加--no-cache参数,禁用Jest缓存,避免旧的编译产物导致sourceMap映射错位。


内容的提问来源于stack exchange,提问作者Raph117

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 22:15:03