Points d’arrêt Mocha utilisant le code Visual Studio

Est-il possible d’append des points d’arrêt à des tests Mocha en utilisant Visual Studio Code?

Normalement, lors du débogage du code, il faut configurer launch.json, en définissant l’atsortingbut du programme sur le fichier javascript à exécuter. Je ne sais pas trop comment faire pour Mocha.

Saviez-vous que vous entrez simplement dans votre configuration de lancement, placez votre curseur après ou entre vos autres configurations et appuyez sur ctrlspace pour obtenir automatiquement une configuration de moka valide?

Ce qui fonctionne parfaitement bien pour moi. Y compris l’arrêt aux points d’arrêt. (J’avais aussi un précédent, maintenant obsolète, qui ne fonctionnait plus pour diverses raisons liées aux parameters.)

entrer la description de l'image ici

À partir de VSCode 1.21.1 (mars 2018), cela donne:

{ "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 } } 

Sur une note secondaire: debug-brk est déprécié (pour toute personne avec Node> = Version 8 au moins).

Si vous ne voulez pas utiliser --debug-brk + Attach ou indiquez un chemin absolu vers votre installation globale de moka (ce qui freine si vous gardez votre launch.json sous contrôle de version et que plusieurs développeurs sont sur des machines différentes), installez mocha comme une dépendance de développement et l’append à votre 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" } } 

Prise en charge complète du débogage dans vos tests en appuyant simplement sur F5.

--no-timeouts s’assure que vos tests ne sont pas interrompus car vous vous êtes arrêté à un point d’arrêt et --colors s’assure que Mocha --colors couleurs même s’il ne détecte pas que le code VS prend en charge les couleurs.

Une autre méthode consiste à utiliser l’option de ligne de commande --debug-brk et le paramètre de lancement par défaut Attach du débogueur de code Visual Studio.


Explication plus approfondie suggérée (d’André)

Pour faire ça:

Exécutez mocha depuis la ligne de commande en utilisant cette commande:

 mocha --debug-brk 

Maintenant, dans VS Code, cliquez sur l’icône Déboguer, puis sélectionnez Attach dans l’option située à côté du bouton Démarrer. Ajoutez des points d’arrêt dans le code VS, puis cliquez sur Démarrer.

J’ai fait ce travail sur VSCode sous OS X 10.10. Remplacez simplement votre fichier ./settings/launch.json par ceci.

 { "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"} } ] } 

Il est également disponible sous forme de liste ici .

Les valeurs clés que vous devez modifier sont le program , qui doit être défini sur l’exécutable _mocha , et sur args , qui devrait être un tableau de vos fichiers de test.

La façon dont j’ai réussi à travailler sur VS Code (1.8.2) sous Mac OS X est la suivante:

 { "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 doit être installé dans le répertoire des modules npm.

J’ai trouvé un moyen d’y parvenir que je classerais comme une solution de contournement . Je m’attends à ce que l’équipe Visual Studio Code fournisse une solution plus définitive pour cela, mais en attendant, c’est ce que j’ai fait:

  1. J’ai créé un fichier ./settings/mocha.js qui exécute les arguments ./settings/mocha.js programmation sous la forme d’une liste de fichiers à exécuter. Vous pouvez voir le fichier complet ici ;
  2. J’ai créé une configuration de lancement qui exécutera le programme ./settings/mocha.js tant que program et transmettra les fichiers / modèles de fichiers à tester en tant qu’arguments:

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

    Exemple de lancement complet.json

Donc, c’est l’équivalent de faire mocha test/unit/*.js test/unit/**/*.js et maintenant nous pouvons utiliser des points d’arrêt dans nos tests de moka.

dans le launch.json, ajoutez 1 configuration supplémentaire ci-dessous

 { "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 vous avez besoin de configurer la version de noeud, ajoutez simplement le champ runtimeExecutable comme ceci

 { "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" }, 

Pour toute personne utilisant Windows. Si vous avez installé mocha globalement, alors le paramétrage du programme sur le chemin suivant a fonctionné pour moi (échangez votre nom d’utilisateur).

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

Désolé d’avoir ajouté une autre réponse, mais aucune des précédentes n’a fonctionné pour moi à partir de VS Code 1.8.1 et du débogueur de nœuds standard inclus. Voici comment je l’ai résolu (avec les conseils des réponses précédentes et des documents officiels de débogage du code Node.js de VS ), il y a donc un débogage en un clic / pression de touche:

  • Assurez-vous que devDependency est installé en tant que devDependency dans packages.json : "devDependencies": { "mocha": "^3.2", ... }
  • Exécutez npm install dans le répertoire de votre package.json pour vous assurer que mocha est maintenant installé dans node_modules/
  • Ouvrez .vscode/launch.json (ou dans le code VS, appuyez sur F1, commencez à taper “launch” et sélectionnez “Debug: Open launch.json”)
  • Cliquez sur le bouton bleu “Ajouter une configuration” en bas à droite (ou copiez et collez l’un de vos autres); cette étape est facultative … Je veux dire, vous pouvez réutiliser une configuration existante. Mais je suggère d’append un pour le garder moins confus.
  • Modifiez ce qui suit dans votre launch.json , puis choisissez le nouveau nom de la configuration dans la fenêtre de débogage dans VS Code et cliquez sur la flèche verte pour commencer à déboguer vos tests node + mocha!

Dans la nouvelle configuration de 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 }, ...] 

Cela suppose que le test/**/*.js schéma test/**/*.js fonctionnera pour l’endroit où vous avez placé vos tests. Changer comme il convient.

N’hésitez pas à modifier le port tant que vous le modifiez dans les deux propriétés args et port .

Les principales différences pour moi consistaient à vérifier que node_modules trouvait dans node_modules , à utiliser le program pour pointer vers l’exécutable, et args nécessitant debug-brk=x pointant vers le port spécifié dans le port . Le rest de ce qui précède ne fait que rendre les choses plus belles et plus faciles.

C’est à vous et à votre équipe si vous mettez ou non .vscode/launch.json dans le référentiel. C’est un fichier IDE uniquement, mais toute votre équipe pourrait l’utiliser comme ça, sans problème, puisque tous les chemins et toutes les installations sont relatifs et explicites.

Astuce: Le package.json peut inclure une balise scripts qui lance également mocha avec quelque chose comme "test": "./node_modules/.bin/mocha" , mais il n’est pas utilisé par le code VS – au lieu de cela il est utilisé lorsque le npm test est exécuter à la ligne de commande. Celui-ci m’a confondu un peu. Le notant ici au cas où d’autres seraient aussi confus.

EDIT: VS Code 1.9.0 a ajouté une option “Ajouter une configuration” dans le menu déroulant de la configuration de débogage, et vous pouvez choisir “Node.js Mocha Tests”, ce qui simplifie la plupart des opérations ci-dessus. Vous devez toujours vous assurer que mocha se trouve dans vos node_modules et que vous node_modules peut-être mettre à jour le cwd et le dernier runtimeArgs (ce qui est le modèle pour trouver vos tests) pour pointer vers les chemins appropriés. Mais une fois que vous avez défini ces deux propriétés, cela devrait fonctionner à partir de là.

Cela fonctionne pour moi sur une machine Windows 7. J’ai mocha installé globalement, mais cette configuration pointe vers l’installation du projet pour éviter le besoin d’un chemin de profil utilisateur (qui btw, j’ai utilisé% USERPROFILE% variable sans succès). Je suis capable de définir des points d’arrêt dans mes tests de moka maintenant. Yay!

 { "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" } 

Pour ceux qui utilisent grunt ou gulp, la configuration est assez 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');}; 

Dans VSCode version 1.13.0 (macOS), ils ont intégré sous les configurations -> Mocha Tests .

Si vous ajoutez la variable $ {file} à la fin de la liste des arguments, vous pouvez commencer à déboguer directement à partir du fichier ouvert:

  { "type": "node", "request": "launch", "name": "Mocha Tests", "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha", "args": [ "-u", "tdd", "--timeout", "999999", "--colors", "${file}" ], "internalConsoleOptions": "openOnSessionStart" } 
  1. Allez dans le menu Debug > Add Configuration...
  2. Sélectionnez l’environnement Node.js
  3. Sélectionnez Mocha Tests option Mocha Tests dans la liste déroulante affichée.
  4. Tapez le chemin de votre fichier de test en tant que dernier élément de la propriété args
  5. Ajouter un breakpoint
  6. Cliquez sur l’icône de Debug
  7. Sélectionner les Mocha Tests comme configuration
  8. Appuyez sur le bouton Start debugging
  9. 🙂

Lorsque vous utilisez TypeScript, la configuration suivante fonctionne pour moi dans Visual Studio Code 0.8.0 (tsc 1.5.3)

tsconfig.json

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

Les points importants à noter ici sont que les cartes source sont générées et que le répertoire de sortie de js est configuré pour être 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" } 

Veuillez noter que sourceMaps est défini sur true et que le outDir est défini sur build

déboguer

  1. Coller les points d’arrêt dans index.ts tout autre fichier index.ts typescript importé
  2. Ouvrez un terminal et lancez: mocha --debug-brk ./build/test/appTests.js
  3. A partir de VSC, lancez la configuration de lancement ‘Attach’

Voici un exemple de configuration de lancement (launch.json) de Microsoft, qui fonctionne avec Mocha et permet d’utiliser le débogueur.

En outre, il existe une description de l’utilisation de l’option –debug-brk.

Enfin, voici une version alternative de la façon de déboguer le code avec les tests Mocha en utilisant le fichier tasks.json du coureur de tâches VS Code et Gulp.

Lorsque vous utilisez Babel ou que vous générez des fichiers javascript tout en plaçant des points d’arrêt dans la source, vous devez vous assurer d’activer les sourceMaps et définir des outFiles . Voici un exemple de configuration qui a fonctionné pour moi.

  { "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, }, 

Remarque: vous devrez modifier les outFiles pour inclure tout ce que vous souhaitez append à un point d’arrêt. Cela peut être plus fastidieux lors de monorepo et de plusieurs projets dépendants.