首页 文章

使用React Native在VS Code中使用断点调试Jest单元测试

提问于
浏览
2

我使用流行的Ignite CLI v2.0.0default boilerplate创建了一个React Native项目 . 然后我用一堆nodejs垫片装饰它,因为我将有一些基于节点的依赖 . 一切正常,我可以从命令行运行Jest测试 . 到现在为止还挺好 .

但是,现在我的一个单元测试是超时 . 这可能是由于异步调用失败而调用模拟的节点函数 . 但是没有关于错误,位置等的信息 .

所以我想使用Visual Studio Code v1.13.1 调试,这里问题开始了 . 我不能为我的生活弄清楚如何配置这个,所以我可以在测试中设置断点,如应用程序代码 node_modules .

我已经安装了React Native Tools v0.3.2 并可以使用默认的 Debug Android 配置启动调试器:

[vscode-react-native] Finished executing: adb -s emulator-5554 shell am broadcast -a "com.myexample.RELOAD_APP_ACTION" --ez jsproxy true
[vscode-react-native] Starting debugger app worker.
[vscode-react-native] Established a connection with the Proxy (Packager) to the React Native application
[vscode-react-native] Debugger worker loaded runtime on port 13746
Running application "MyApplication" with appParams: {"rootTag":1}. __DEV__ === true, development-level warning are ON, performance optimizations are OFF

但没有破坏点 . VS说: Breakpoint ignored because generated code not found (source map problem?). (顺便说一下: index.android.bundleindex.android.map 刚刚在 .vscode/.react 中生成) . 而且我也没有看到通过测试代码调试的方法(它位于 ${projectRoot}/Tests 中) .

基于google搜索,我创建了另一个用于在VS Code中运行Jest的调试配置:

{
        "type": "node",
        "request": "launch",
        "name": "Jest Tests",
        "program": "${workspaceRoot}/node_modules/jest-cli/bin/jest.js",
        "args": [
            "--config",
            "package.json",
            "--runInBand",
            "--verbose",
            "--no-cache",
            "-u"
        ],
        "runtimeArgs": [
            "--nolazy"
        ],
        "console": "internalConsole",
        "sourceMaps": true,
        "address": "localhost",
        "port": 8081,
        "outFiles": [
            "${workspaceRoot}/.vscode/.react"
        ],
        "env": {
            "NODE_ENV": "test"
        }
    }

这至少运行测试,在VS调试控制台中显示测试报告,但再一次没有任何断点被击中 .

我也尝试将 outFiles 设置为ignite生成包的位置,即 ${workspaceRoot}/android/app/build/intermediates/assets/debug/* ,结果相同 .

有谁能指出我正确的方向?

PS . 我在Ubuntu 16.04:

System
  platform           linux                                                                                                
  arch               x64                                                                                                  
  cpu                4 cores      Intel(R) Core(TM) i7-4500U CPU @ 1.80GHz  

JavaScript
  node               8.1.2        /usr/local/bin/node  
  npm                4.6.1        /usr/local/bin/npm   
  yarn               0.24.6       /usr/bin/yarn

React Native
  react-native-cli   2.0.1       
  app rn version     0.45.1      

Ignite
  ignite             2.0.0        /usr/local/bin/ignite  

Android
  java               1.8.0_111    /usr/bin/java  
  android home       -            undefined

1 回答

  • 2

    终于找到了解决方案 . 似乎Node 8.* 中的新检查器协议仍存在许多问题 . 简而言之,对 --inspect 的支持仍然是非常实验性的 .

    例如,NodeJS Inspector Manager(NiM 0.13.8 )在几秒钟后崩溃并断开websocket(参见:NiM Github issue #17和Chromium bug#734615) .

    所以我降级了NodeJS 8.1.2 - > 7.10.1

    现在终于按预期工作了 . 我可以在VS代码中进行所有调试,点击所有断点,使用以下调试配置:

    {
            "type": "node",
            "request": "launch",
            "name": "Launch Tests",
            "program": "${workspaceRoot}/node_modules/.bin/jest",
            "args": [
                "--runInBand",
                "--no-cache"
            ],
            "runtimeArgs": [
                "--debug-brk=127.0.0.1:5858"
            ],
            "port": 5858
        }
    

    在一个应该是5分钟的事情上浪费了一天多的时间 . 想都不用想 . 但幸运的是它现在正在工作!

相关问题