【问题标题】:Debugging Cypress tests in Visual Studio Code在 Visual Studio Code 中调试 Cypress 测试
【发布时间】:2018-09-25 15:46:25
【问题描述】:

我想使用 VS Code 来编辑和调试 Cypress 测试。 cypress 文档 mention VS Code directly,但没有提供任何关于如何配置 VS Code 的 launch.json 文件以便在那里或调试页面上进行调试的线索。

我有一个启动 cypress/electron 的 launch.json 配置,但是 VS Code 给出了这个错误:

无法连接到运行时进程...连接 ECONNREFUSED 127.0.0.1:5858

然后关闭它。

查看sample electron for VS Code project 没有帮助,添加protocolprogram 属性也不起作用。

这是我的配置:

{
    "name": "Start integration_tests",
    "type": "node",
    "request": "launch",
    "stopOnEntry": false,
    "cwd": "${workspaceRoot}",
    "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/cypress",
    "runtimeArgs": [
        "open"
    ],
    "console" : "internalConsole",
    "port": 5858,
}

【问题讨论】:

  • Cypress 建议使用他们的调试器,也许这会对您有所帮助? docs.cypress.io/guides/guides/debugging.html#Using-debugger
  • 那篇文章似乎 建议在调试语句中添加将触发 chrome 开发工具打开的语句。我更喜欢在编写测试的 IDE 中进行调试。
  • 是的,确实如此。我没有看到有人在 VS 中调试 cypress,所以我把它作为一个选项扔给你。
  • @Brendan 再强调一点,当我使用调试器时,我看到开发工具中的编译代码与我们编写的测试不同。

标签: visual-studio-code cypress


【解决方案1】:

@fhilton 的答案曾经有效,但对于较新版本的赛普拉斯,它会导致 Chrome 无法连接到测试运行器并且无法运行任何测试。改用这个:

  1. 如果您或您的任何同事使用 Windows 进行开发,请运行 npm i -D cross-env

  2. 在 package.json 中添加一个脚本来启动 Cypress 测试运行程序(或者如果您已经有一个类似 cypress open 的脚本,那么只需修改它)。您希望脚本在运行cypress open 之前将CYPRESS_REMOTE_DEBUGGING_PORT 环境变量设置为9222。由于我使用的是Windows,所以我使用cross-env npm 包来设置环境变量。因此,我的 package.json 中的脚本看起来像

    "scripts": {
      "cypr": "cross-env CYPRESS_REMOTE_DEBUGGING_PORT=9222 cypress open",
    },
    

    我从herehere 得到了这样做的想法。这个答案的其余部分主要是@fhilton 在他的答案中写的,所以大部分功劳归于他们。

  3. 将以下内容添加到您的launch.json 中的configurations 列表中(注意与上面相同的端口)

    {
        "type": "chrome",
        "request": "attach",
        "name": "Attach to Cypress Chrome",
        "port": 9222,
        "urlFilter": "http://localhost*",
        "webRoot": "${workspaceFolder}",
        "sourceMaps": true,
        "skipFiles": [
            "cypress_runner.js",
        ],
    },
    
  4. 在您的测试中输入单词debugger。见Cypress Doc on debugging。或者,如果您对源映射有信心,请使用 vscode 在代码中设置断点。

  5. 运行 npm run cypr(或任何你调用的 npm 脚本)

  6. 从 Cypress 测试运行器,开始在 Chrome 中运行测试

  7. 使用新的“附加到赛普拉斯 Chrome”配置启动 vscode 调试器

  8. 重新启动测试并在其中进行断点调试!

【讨论】:

  • 这对我没有直接作用,但是一旦我使用了它附加的 Chrome 调试器扩展中的默认启动配置文件。我能看到的唯一真正的区别是类型是 pwa-chrome 而不是 chrome 并且缺少 urlFilter
  • 我按照步骤 1-3 让它工作了,然后转到 VS Code 中的调试器面板,选择下拉菜单并选择 Node.js。现在它将列出您的package.json 中的所有脚本。只需选择您在第 3 步中更新的脚本,它应该是调试会话。已验证它可以在 Mac / Windows 中运行。
  • @RealWillyWoka 你的配置现在是什么样的?它没有为我列出来自package.json 的脚本。
  • 不应该将 cross-env 安装为 devDependencies 吗? npm i --save-dev cross-env
  • @Bob,你是对的。我相应地对其进行了编辑。
【解决方案2】:

我今天设置了它,它成功了!

  1. 修改 plugins/index.js 以在调试模式下启动 Chrome (--remote-debugging-port=9222):
module.exports = (on, config) => {

  on('before:browser:launch', (browser = {}, args) => {

    if (browser.name === 'chrome') {
      args.push('--remote-debugging-port=9222')

      // whatever you return here becomes the new args
      return args
    }

  })
}

Cypress Browser Launch API

  1. 将以下内容添加到您的launch.json(注意与上面相同的端口)
{
  "type": "chrome",
  "request": "attach",
  "name": "Attach to Chrome",
  "port": 9222,
  "urlFilter": "http://localhost:4200/*",
  "webRoot": "${workspaceFolder}"
}
  1. 在您的测试中加入“调试器”一词。见Cypress Doc on debugging
  2. 运行“cypress open”并在 Chrome 中从 #3 启动测试
  3. 使用新的“附加到 Chrome”配置启动 vscode 调试器
  4. 重新启动测试并在其中使用“调试器”进行调试!

【讨论】:

  • 我标记为答案是因为我想世界上没有任何方法可以做我觉得很自然的事情:在 VS Code 中按 F5(配置了一些测试),仅此而已。 Chrome 会打开并运行您刚刚启动的测试。
  • 这并不是 VS Code 的错。该扩展只能附加到已启用该命令行开关所做的 HTTP 远程调试的实例。好答案@fhilton
  • 重要的是要提到您应该更改urlFilter 以匹配您的应用程序的url。我花了一段时间才弄清楚这一点......
  • 我同意@dudeNumber4,设置断点并像在 Selenium 中使用 Visual Studio 一样按 F5 应该很简单。
猜你喜欢
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 2020-06-09
  • 2021-03-05
  • 1970-01-01
  • 2017-12-01
相关资源
最近更新 更多