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

标签 android debugging react-native visual-studio-code jestjs

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

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

所以我想使用 Visual Studio Code v1.13.1 进行调试,问题就在这里开始了。我一辈子都想不出如何配置它,所以我可以像在应用程序代码 + node_modules 中一样在测试中设置断点both

我已经安装了 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 中)进行调试的方法。

基于大量谷歌搜索,我创建了另一个用于在 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/*结果相同。

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

附言。我在 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

最佳答案

终于找到解决办法了。 Node 8.* 中的新检查器协议(protocol)似乎仍然存在许多问题。简而言之,对 --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 分钟的事情上浪费了一天多的时间。不费吹灰之力。但幸运的是它现在可以工作了!

关于android - 使用 React Native 在 VS Code 中使用断点调试 Jest 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45056952/

相关文章:

javascript - 如何从 Angularjs 内联模板脚本标记内打印到 console.log?

c++ - 我可以将 Visual Studio 2005 设置为在调试时忽略特定代码区域中的断言吗

android - React Native 在构建时抛出访问被拒绝错误

javascript - 找不到状态变量

java - 使用调试键测试 Android 应用程序

android - 在 TextView 上添加新行 `\n' 将不起作用

java - Netty:使用 `IdleStateHandler`检测断线

java - 在 EditText 内写入

java - Eclipse:是否可以调试 CompletableFuture 调用的方法?

reactjs - setState 为对象内的数组