Búsqueda de sitios web

depuración - Cómo depurar pruebas de Nightwatch en VS Code


Estoy intentando depurar pruebas e2e de Nightwatch usando VS Code. Escribo mis pruebas usando TypeScript. Solo puede funcionar cuando pongo un punto de interrupción en el archivo js, después de eso va al archivo ts y puedo depurarlo desde allí. Si lo pongo en el archivo ts de mi prueba, nunca se detendrá y aparece escrito "Punto de interrupción ignorado porque no se encontró el código generado". Mis archivos fuente se compilan usando el compilador ts al directorio /dist/dev/specs/e2e/nightwatch/src. Código del 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"

¿Quizás alguien ha tenido un problema similar? Cualquier ayuda sería apreciada.

Respuesta #1

Lo siguiente está funcionando de maravilla en mi caso.

Aquí está la estructura del proyecto. A continuación está mi 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
                  }
                 ]
}

El código anterior es el requisito mínimo para depurar un proyecto Nightwatch js en la última versión de Visual Studio Code 1.21.1. Estoy usando node.js v6.11.2, por lo que el protocolo de depuración es antiguo.

Gracias Stack Overflow.

Respuesta #2

Una cosa que normalmente me ayuda en los casos en los que tengo que depurar aplicaciones Node.js del lado del servidor es usar gulp-sourcemaps y allí jugar con las rutas de origen generadas (ver el valor de la propiedad "sources" en tus archivos js.map) haciéndolas absolutas y coincidiendo perfectamente con las ubicaciones de tus archivos ts:

Por ejemplo:

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));
});

Aunque es un poco chapucero, funciona para mí cada vez y es bastante sencillo de configurar.

Artículos relacionados