visual tutorial studio node instalar for extensions debug create code node.js visual-studio-code mocha bdd tdd

node.js - tutorial - visual studio code install npm



Puntos de interrupciĆ³n de Mocha con Visual Studio Code (19)

¿Es posible agregar puntos de interrupción a las pruebas de Mocha usando Visual Studio Code?

Normalmente, cuando se depura el código, uno necesita configurar launch.json, configurando el atributo del programa en el archivo javascript para ejecutar. Sin embargo, no estoy seguro de cómo hacer esto para Mocha.


  1. Vaya al menú Debug > Add Configuration...
  2. Seleccione el entorno Node.js
  3. Seleccione Mocha Tests opción Mocha Tests de la lista desplegable que aparece
  4. Escriba la ruta de su archivo de prueba como el último elemento de la propiedad args
  5. Agregar un breakpoint
  6. Haga clic en el icono de Debug
  7. Seleccione Mocha Tests como configuración
  8. Presione el botón Start debugging
  9. :-)

1) Ir a

.vscode

entonces

launch.json

expediente

2) Agregue la siguiente configuración en launch.json:

{ "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "Mocha Test", "cwd": "${workspaceRoot}", "runtimeExecutable": "${workspaceRoot}/*folder_path_containing_test*/node_modules/.bin/mocha", "windows": { "runtimeExecutable": "${workspaceRoot}/*folder_path_containing_test*/node_modules/.bin/mocha.cmd" }, "runtimeArgs": [ "--colors", "--recursive", "${workspaceRoot}/*folder_path_till_test*/tests" ], "internalConsoleOptions": "openOnSessionStart" }, { "type": "node", "request": "launch", "name": "Launch Program", "program": "${workspaceRoot}/*folder_path_to_test*/app.js" } ] }

3) Establezca puntos de interrupción en el archivo de prueba y luego presione F5


Al usar Babel, o al generar archivos javascript y colocar puntos de interrupción en la fuente, debe asegurarse de habilitar sourceMaps y definir outFiles . Aquí hay una configuración de ejemplo que funcionó para mí.

{ "name": "Mocha Test", "type": "node", "request": "launch", "program": "${workspaceRoot}/packages/api/node_modules/mocha/bin/_mocha", "cwd": "${workspaceRoot}/packages/api", "args": ["--colors", "--no-timeouts", "out/test"], "outFiles": ["${workspaceRoot}/packages/api/out/*"], "sourceMaps": true, },

Nota: deberá modificar outFiles para incluir todo lo que desee agregar a un punto de interrupción. Esto puede ser más tedioso cuando se trata de un monorepo y múltiples proyectos dependientes.



Cuando uso TypeScript, la siguiente configuración me funciona en Visual Studio Code 0.8.0 (tsc 1.5.3)

tsconfig.json

{ "compilerOptions": { "module": "commonjs", "target": "es5", "noImplicitAny": false, "removeComments": true, "preserveConstEnums": true, "sourceMap": true, "outDir": "build", "declaration": false }, "files": [ "./src/index.ts", "./src/test/appTests.ts" ] }

Lo importante a tener en cuenta aquí es que se generan mapas de origen y que el directorio de salida para js está configurado para build

launch.json

{ "name": "Attach", "type": "node", // TCP/IP address. Default is "localhost". "address": "localhost", // Port to attach to. "port": 5858, "sourceMaps": true, "outDir": "build" }

Tenga en cuenta que sourceMaps está establecido en true y que outDir está configurado para build

depurar

  1. index.ts puntos de interrupción en index.ts cualquier otro archivo mecanografiado importado
  2. Abra una terminal y ejecute: mocha --debug-brk ./build/test/appTests.js
  3. Desde VSC, ejecute la configuración de inicio ''Adjuntar''

En VSCode versión 1.13.0 (macOS), lo tienen incorporado en configuraciones -> Mocha Tests .


Esto funciona para mí en una máquina con Windows 7. Tengo mocha instalado globalmente, pero esta configuración apunta a la instalación del proyecto para evitar la necesidad de una ruta de perfil de usuario (que por cierto, intenté usar la variable% USERPROFILE% sin éxito). Ahora puedo establecer puntos de interrupción en mis pruebas de moca. ¡Hurra!

{ "name": "Mocha Tests", "type": "node", "request": "launch", "stopOnEntry": false, "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha", "cwd": "${workspaceRoot}", "args": ["./test/**/*.js"], "runtimeExecutable": null, "envFile": "${workspaceRoot}/.env" }


He descubierto una manera de hacer esto que clasifico como una solución alternativa . Espero que el equipo de Visual Studio Code proporcione una solución más definitiva para esto, pero mientras tanto esto es lo que he hecho:

  1. He creado un archivo ./settings/mocha.js que ejecuta mocha programáticamente pasando argumentos como una lista de archivos a ejecutar. Puedes ver el archivo completo here ;
  2. He creado una configuración de inicio que ejecutará ./settings/mocha.js como program y pasará los archivos / patrones de archivos que necesitamos probar como argumentos:

    { "name": "Unit tests", "type": "node", "program": ".settings/mocha.js", "stopOnEntry": true, "args": ["test/unit/*.js", "test/unit/**/*.js"], "cwd": ".", "runtimeExecutable": null, "env": { } }

    Ejemplo completo de launch.json

Entonces, esto es el equivalente a hacer mocha test/unit/*.js test/unit/**/*.js y ahora podemos usar puntos de interrupción en nuestras pruebas mocha.


He hecho que esto funcione en VSCode en OS X 10.10. Simplemente reemplace su archivo ./settings/launch.json con esto.

{ "version": "0.1.0", "configurations": [ { "name": "Run app.js", "type": "node", "program": "app.js", // Assuming this is your main app file. "stopOnEntry": false, "args": [], "cwd": ".", "runtimeExecutable": null, "env": { "NODE_ENV": "production"} }, { "name": "Run mocha", "type": "node", "program": "/Users/myname/myfolder/node_modules/mocha/bin/_mocha", "stopOnEntry": false, "args": ["test/unit.js"], "cwd": ".", "runtimeExecutable": null, "env": { "NODE_ENV": "production"} } ] }

También está disponible como una esencia here .

Los valores clave que necesita cambiar son el program , que debe establecerse en el ejecutable _mocha , y args , que debe ser una matriz de sus archivos de prueba.


La forma en que lo hice funcionar en VS Code (1.8.2) en Mac OS X es:

{ "name": "Mocha", "type": "node", "request": "launch", "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha", "stopOnEntry": false, "args": ["--recursive"], //you can specify paths to specific tests here "cwd": "${workspaceRoot}", "runtimeExecutable": null, "env": { "NODE_ENV": "testing" } }

Mocha necesita ser instalado en el directorio de módulos npm.


Otra forma es usar la opción de línea de comando --debug-brk de mocha y la configuración de inicio de Attach predeterminada del depurador de Visual Studio Code.

Explicación más profunda sugerida (de André)

Para hacer esto:

Ejecute mocha desde la línea de comandos con este comando:

mocha --debug-brk

Ahora en VS Code, haga clic en el ícono Debug, luego seleccione Attach de la opción al lado del botón de inicio. Agregue puntos de interrupción en el Código VS y luego haga clic en Inicio.


Para aquellos que usan gruñidos o tragos, la configuración es bastante simple.

Launch.json

{ "version": "0.2.0", "configurations": [ { "name": "Run mocha by grunt", "type": "node", "program": "${workspaceRoot}/node_modules/grunt/bin/grunt", "stopOnEntry": false, "args": ["mochaTest"], "cwd": "${workspaceRoot}", "runtimeExecutable": null } ]}

Gruntfile.js

module.exports = function (grunt) { grunt.initConfig({ mochaTest: { test: { options: { reporter: ''spec'' }, src: [''test/**/*test.js''] } } }); grunt.loadNpmTasks(''grunt-mocha-test''); grunt.registerTask(''default'', ''mochaTest'');};


Para cualquiera que use Windows. Si ha instalado mocha globalmente, configurar el programa en la siguiente ruta funcionó para mí (cambie su nombre de usuario).

"program": "C://Users//myname//AppData//Roaming//npm//node_modules//mocha//bin//_mocha"


Perdón por agregar otra respuesta, pero ninguna de las anteriores funcionó para mí a partir del VS Code 1.8.1 y el depurador de nodo estándar incluido en él. Aquí está la forma en que lo resolví (con la orientación de las respuestas anteriores aquí y de los documentos oficiales de depuración VS Code Node.js ) para que haya una depuración de clic / pulsación de tecla:

  • Asegúrese de que mocha esté instalado como devDependency en packages.json : "devDependencies": { "mocha": "^3.2", ... }
  • Ejecute npm install en el directorio de su package.json para asegurarse de que mocha ahora esté instalado en node_modules/
  • Abra .vscode/launch.json (o en VS Code, presione F1, comience a escribir "launch" y seleccione "Debug: Open launch.json")
  • Haga clic en el botón azul "Agregar configuración" en la parte inferior derecha (o simplemente copie y pegue uno de los otros); este paso es opcional ... Quiero decir, puede reutilizar una configuración existente. Pero sugiero agregar uno para que sea menos confuso.
  • ¡Cambie lo siguiente en su launch.json , luego elija el nuevo nombre de configuración en la ventana de depuración en VS Code y haga clic en la flecha verde para comenzar a depurar sus pruebas de nodo + mocha!

En la nueva configuración en launch.json:

"configurations": [{ "name": "whatever name you want to show in the VS Code debug list", "type": "node", "cwd": "${workspaceRoot}", "program": "${workspaceRoot}/node_modules/mocha/bin/mocha", "args": ["--debug-brk=5858", "--no-timeouts", "--colors", "test/**/*.js"], "address": "localhost", "port": 5858, // the other default properties that are created for you are fine as-is }, ...]

Esto supone que la test/**/*.js patrón test/**/*.js funcionará en el lugar donde colocas tus pruebas. Cambiar según corresponda.

Siéntase libre de cambiar el puerto siempre que lo cambie tanto en los args como en las propiedades del port para que coincidan.

Las diferencias clave para mí fueron asegurarme de que mocha estuviera en node_modules , usando el program para apuntar al ejecutable, y args necesita debug-brk=x apuntando al puerto especificado en el port . El resto de lo anterior solo hace las cosas más bonitas y fáciles.

.vscode/launch.json usted y de su equipo si coloca .vscode/launch.json en el repositorio o no. Es un archivo solo IDE, pero todo su equipo podría usarlo así, no hay problema, ya que todas las rutas e instalaciones son relativas y explícitas.

Consejo: El package.json puede incluir una etiqueta de scripts que también lanza mocha con algo como "test": "./node_modules/.bin/mocha" , pero VS Code no lo usa, sino que se usa cuando npm test es correr en la línea de comando. Este me confundió un poco. Notándolo aquí en caso de que otros también se confundan.

EDITAR: VS Code 1.9.0 ha agregado una opción "Agregar configuración" en el menú desplegable de configuración de depuración, y puede elegir "Node.js Mocha Tests" que ayudan a simplificar la mayoría de los anteriores. Todavía necesita asegurarse de que mocha esté en sus node_modules y que runtimeArgs actualizar cwd y last runtimeArgs (que es el patrón para encontrar sus pruebas) para apuntar a las rutas apropiadas. Pero una vez que establezca esas dos propiedades, debería funcionar más o menos desde allí.


Si agrega la variable $ {archivo} al final de la lista de argumentos, puede comenzar a depurar directamente desde el archivo que ha abierto:

{ "type": "node", "request": "launch", "name": "Mocha Tests", "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha", "args": [ "-u", "tdd", "--timeout", "999999", "--colors", "${file}" ], "internalConsoleOptions": "openOnSessionStart" }


Si no desea utilizar --debug-brk + Adjuntar o indicar una ruta absoluta a su instalación global de mocha (que se frenará si mantiene su launch.json bajo control de versiones y tiene múltiples desarrolladores en diferentes máquinas), instale mocha como dependencia de desarrollo y agregue esto a su launch.json:

{ "name": "mocha", "type": "node", "request": "launch", "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha", "stopOnEntry": false, "args": ["--no-timeouts", "--colors"], //you can specify paths to specific tests here "cwd": "${workspaceRoot}", "runtimeExecutable": null, "env": { "NODE_ENV": "testing" } }

Soporte completo de depuración en sus pruebas simplemente presionando F5.

--no-timeouts se asegura de que sus pruebas no excedan el tiempo de espera porque se detuvo en un punto de interrupción, y --colors se asegura de que Mocha emita colores aunque no detecte que VS Code admite colores.


Si tiene alguna dependencia en la prueba, también es fácil adjuntarla.

Por ejemplo, estoy usando mongo-unit-helper para tener también pruebas unitarias integradas con la base de datos.

package.json script package.json es: mocha --recursive --require ./test/mongo-unit-helper.js --exit"

Mi launch.json ve así:

"configurations": [ { "type": "node", "request": "launch", "name": "Mocha Tests", "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha", "args": [ "-u", "tdd", "--timeout", "999999", "--colors", "--recursive", "--require", "${workspaceFolder}/test/mongo-unit-helper.js", "${workspaceFolder}/test/**/*.js", ], "internalConsoleOptions": "openOnSessionStart" } ]

La solución es poner --require separado en args en launch.json .


en launch.json, agregue 1 configuración más a continuación

{ "type": "node", "request": "launch", "name": "Mocha Tests", "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha", "args": [ "--timeout", "10000", "${workspaceRoot}/services/*.spec.js", "${workspaceRoot}/*.spec.js" ], "internalConsoleOptions": "openOnSessionStart" },

si necesita configurar la versión del nodo, simplemente agregue el campo runtimeExecutable como este

{ "type": "node", "request": "launch", "name": "Mocha Tests", "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha", "args": [ "--timeout", "10000", "${workspaceRoot}/services/*.spec.js", "${workspaceRoot}/*.spec.js" ], "internalConsoleOptions": "openOnSessionStart", "runtimeExecutable": "${env:HOME}/.nvm/versions/node/v8.2.1/bin/node" },


¿Sabía que simplemente ingresa a su configuración de inicio, coloca el cursor después o entre sus otras configuraciones y presiona ctrl - space para obtener una configuración de mocha válida y actual generada automáticamente?

Lo cual funciona perfectamente bien para mí. Incluyendo detenerse en puntos de interrupción. (También tenía una anterior, ahora obsoleta, que ya no funcionaba por varias razones relacionadas con la configuración).

A partir del VSCode 1.21.1 (marzo de 2018), esto produce:

{ "version": "0.2.0", "configurations": [ { "name": "Mocha (Test single file)", "type": "node", "request": "launch", "runtimeArgs": [ "${workspaceRoot}/node_modules/.bin/mocha", "--inspect-brk", "${relativeFile}", ], "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", "port": 9229 } }

En una nota al margen: debug-brk está desaprobado (para cualquier persona con Nodo> = Versión 8 al menos).