乐趣区

关于webstorm:Vscode和webstorm在运行Jest测试时异步断点不准确的问题

始终以来被动一个问题困扰,在开发 react-native 利用时,无论是在 Vscode 或 webstorm 在运行 Jest 测试时均无奈在 async 和 yield 函数中胜利打断点,断点总是在函数头部就停下来,无奈停在 await 或 yield 下面,如此单步调试的体验极差。

尽管晓得是 sourceMap 的问题,然而所有该配置参数均配置了,然而还是毫无效果。
并且搜寻了良久均没有找到解决问题的方法。

通过折腾,终于发现问题所在,特此记录下.

  • 首先确认是 sourceMap 的问题,因为通过 babel 转码,所有须要配置生成sourcemap
// babel.config.js
    sourceMaps:"both",
    retainLines: true

配置此文件的目标是生成 sourcemap,就两个参数折腾了好几种组合,就 TMD 有效,切实郁闷。
然而如果配置必定是没有问题,然而就不无奈打断开,阐明 sourcemap 有问题,然而问题出在哪里?

  • 接下查看 jest 配置
    发现在 package.json 外面有这样一个配置项

    // package.json
    {
    jest:{
      "presets":"react-native",
      "setupFiles": ["./node_modules/react-native-gesture-handler/jestSetup.js"]
    }
    }

    下面的意思是 jest 在转码时启用了 react-native 预设,该预设应该是配置了一些 babel 的相干参数来进行转码。

而后,还发现在 babel.config.js 中,启用的是另外一个预设

module.exports = {presets: ["module:metro-react-native-babel-preset"],
}

难道是 "module:metro-react-native-babel-preset""react-native"抵触?
好象从情理上也是说得通的,不同的预设的差别导致生成的 sourcemap 不失常,从而无奈进行无效的断点定位。

因而,尝试将 package.json 外面的 "presets":"react-native" 删除了。

果然,断点调试恢复正常了,这阐明对问题的剖析应该是正确的。

这个问题只在时行 jest 单元测试时出错,所以网上也没有找到解决方案,最终一个困扰良久的问题总算失去解决。

退出移动版