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.
-
Vaya al menú
Debug > Add Configuration...
-
Seleccione el entorno
Node.js
-
Seleccione
Mocha Tests
opciónMocha Tests
de la lista desplegable que aparece -
Escriba la ruta de su archivo de prueba como el último elemento de la propiedad
args
-
Agregar un
breakpoint
-
Haga clic en el icono de
Debug
-
Seleccione
Mocha Tests
como configuración -
Presione el botón
Start debugging
- :-)
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.
Aquí hay un ejemplo de configuración de lanzamiento (launch.json) de Microsoft, que funciona con Mocha y permite usar el depurador.
Además, hay una description de cómo usar la opción --debug-brk.
Finalmente, aquí hay una versión alternativa de cómo depurar código con pruebas Mocha usando el archivo task.json de VS Code y Gulp Task Runner.
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
-
index.ts
puntos de interrupción enindex.ts
cualquier otro archivo mecanografiado importado -
Abra una terminal y ejecute:
mocha --debug-brk ./build/test/appTests.js
- 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:
-
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 ; -
He creado una configuración de inicio que ejecutará
./settings/mocha.js
comoprogram
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": { } }
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
enpackages.json
:"devDependencies": { "mocha": "^3.2", ... }
-
Ejecute
npm install
en el directorio de supackage.json
para asegurarse de que mocha ahora esté instalado ennode_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).