如何在VS Code中调试Nightwatch测试

7

我试图使用 VS Code 调试 Nightwatch 的端到端测试。我使用 TypeScript 编写我的测试脚本。只有当我在 JavaScript 文件中设置断点时,它才能正常工作,并跳转到对应的 TypeScript 文件进行调试。如果我将断点放在测试的 TypeScript 文件中,它就永远不会停止,并显示“未找到生成的代码,忽略断点”。我的源文件使用 ts 编译器编译到 /dist/dev/specs/e2e/nightwatch/src 文件夹中。以下是 launch.json 文件的代码:

        "name": "Launch e2e Tests on chrome",
        "type": "node",
        "console": "integratedTerminal",
        "program": "${workspaceRoot}/dist/dev/specs/e2e/nightwatch/nightwatch.js",
        "stopOnEntry": false,.
        "args": ["-env default,-f DatabaseChecks.js"],
        "cwd": "${workspaceRoot}",
        "runtimeExecutable": null,.
        "runtimeArgs": ["--nolazy"],
        "env": {
            "NODE_ENV": "development"
        },
        "sourceMaps": true,
        "outFiles": ["${workspaceRoot}/dist/dev/specs/e2e/nightwatch/src"],
        "request": "launch"

也许有人遇到过类似的问题吗?任何帮助将不胜感激。

你需要添加关于如何以及在哪里编译和保存源文件的信息。你已经将其标记为TypeScript,所以我假设你是将ts编译成js。我通常用于调试的方法是让tsc编译到一个临时文件夹,然后将“outFiles”指向它。 - Meirion Hughes
我使用了 ts 编译器,并将编译好的 js 文件放在我指定的"outFiles"文件夹中。因此,在那里我有 js 和 js.map 文件。我尝试将确切的文件放入"outFiles",但仍然没有成功。 - Katia
也许这个线程提供了所需的解决方案(在tsconfig.json中启用内联源映射)。 https://groups.google.com/forum/#!topic/nightwatchjs/5pY0nKFTunQ - jannnik
4个回答

8
以下内容在我的情况下如魔法般正常工作。 这是项目结构:Here is the project structure. 以下是我的launch.json。
 {
// Use IntelliSense to learn about possible Node.js debug attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
                   {
                      "type": "node",
                      "request": "launch",
                      "name": "Nightwatch",
                      "program": "${workspaceRoot}/node_modules/nightwatch/bin/runner.js",
                      "stopOnEntry": false,
                      "args": [
                                 "--test",
                                 "tests/functionality_e2e_test.js"
                              ],           
                       "runtimeExecutable": null,
                       "sourceMaps": false
                  },
                  {
                       "type": "node",
                       "request": "attach",
                       "name": "Attach to Process",
                       "port": 5858
                  }
                 ]
}

上述代码是在Visual Studio Code最新版本1.21.1中调试Nightwatch js项目的最低要求。我正在使用Node.js v6.11.2,因此调试协议是旧版的。感谢 Stack Overflow。

1

如果你不需要Typescript部分,可以使用此配置(基于WebStorm的建议):

{
"version": "0.2.0",
"configurations": [
    {
        "type": "node",
        "request": "launch",
        "name": "Launch Program",
        "program": "${workspaceRoot}/node_modules/nightwatch/bin/runner.js",
        "args": [
          "--config",
          "test/e2e/nightwatch.conf.js"
        ]
    }
]

}


不适用于问题,因为Katia要求一个TypeScript启用的修复程序,但它是谷歌的顶部结果,正好是我非TypeScript解决方案所需的。 - Alex A
对我没用,但是最佳答案有效。 - JohnP2

1

我在调试服务器端node.js应用程序时通常会使用gulp-sourcemaps,并通过调整生成的源路径(检查js.map文件中的“sources”属性值)来精确匹配我的ts文件位置:

例如:

gulp.task('build', () => 
{
    var tsProject = ts.createProject('tsconfig.json', {
        typescript: require('typescript')
    });

    var tsResult = tsProject.src()
        .pipe(sourcemaps.init())   
        .pipe(tsProject()); 

        //Write compiled js
    return tsResult.js.pipe(sourcemaps.write(
            ".", 
            { 
                includeContent: false, 
                mapSources: function(sourcePath) 
                {
                    //Play around here - converting your relative paths to absolute ones that match location of ts file perfectly 
                    return sourcePath.replace('../../../', __dirname + '/');
                } 
            })).pipe(gulp.dest(TEMP_TARGET_FOLDER));
});

虽然有点取巧,但每次都对我有效,并且设置非常简单。


-1
我使用那个:
{
    "type": "node",
    "request": "launch",
    "name": "Nightwatch 2",
    "port": 9229,
    "program": "${workspaceRoot}/node_modules/nightwatch/bin/nightwatch",
    "stopOnEntry": false,
    "args": [
        "--env",
        "localchrome"
    ],
    "cwd": "${workspaceRoot}",
    "sourceMaps": false,
    "env": {
        "ENV": "s11",
        "TAGS": "@WIP"
    },
    "runtimeArgs": [
        "--inspect"
    ]
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接