Est-il possible d'ajouter des points d'arrêt à des tests Mocha à l'aide de Visual Studio Code?
Normalement, lors du débogage du code, il est nécessaire de configurer le fichier launch.json, en définissant l'attribut du programme sur le fichier javascript à exécuter. Je ne sais pas comment faire cela pour Mocha cependant.
Saviez-vous que vous allez juste dans votre configuration de lancement, placez votre curseur après ou entre vos autres configurations et appuyez sur ctrl-space obtenir une configuration actuelle de mocha valide générée automatiquement?
Ce qui fonctionne parfaitement pour moi. Y compris les arrêts aux points d'arrêt. (J'avais aussi un précédent, maintenant obsolète, qui ne l'était plus pour diverses raisons liées au réglage.)
À partir du 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 de côté: debug-brk
est déprécié (pour toute personne avec Node> = Version 8 au moins).
Si vous ne voulez pas utiliser --debug-brk
+ Attachez ou indiquez un chemin absolu à votre installation globale de mocha (ce qui ralentira si vous maintenez votre launch.json sous contrôle de version et si vous avez plusieurs développeurs sur différentes machines), installez mocha en tant que dépendance de dev et ajoutez-le à votre lancement. 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 n'expirent pas, car vous vous êtes arrêté à un point d'arrêt, et --colors
s'assure que Mocha génère des couleurs même s'il ne détecte pas que VS Code prend en charge les couleurs.
Une autre façon consiste à utiliser le --debug-brk
option de ligne de commande de mocha et le paramètre par défaut Attach
de lancement du débogueur de code Visual Studio.
Explication plus profonde suggérée (par André)
Pour faire ça:
Exécutez mocha à partir de la ligne de commande en utilisant cette commande:
mocha --debug-brk
Maintenant, dans VS Code, cliquez sur l’icône Debug, puis sélectionnez Attach
dans l’option située en regard du bouton de démarrage. Ajoutez des points d'arrêt dans VS Code, puis cliquez sur Démarrer.
J'ai fait ce travail sur VSCode sur OS X 10.10. Il suffit de remplacer votre ./settings/launch.json
fichier avec cela.
{
"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 Gist here .
Les valeurs de clé que vous devez modifier sont program
, qui devrait être défini sur _mocha
exécutable, et args
, qui devrait être un tableau de vos fichiers de test.
Voici comment je fonctionne sur VS Code (1.8.2) sur Mac OS X:
{
"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.
Debug > Add Configuration...
menuNode.js
environnementMocha Tests
option dans la liste déroulanteargs
breakpoint
Debug
Mocha Tests
comme configurationStart debugging
boutonJ'ai trouvé un moyen de le faire que je qualifie de solution de contournement . Je m'attends à ce que l'équipe de Visual Studio Code fournisse une solution plus définitive à cet égard, mais en attendant, voici ce que j'ai fait:
./settings/mocha.js
fichier qui exécute mocha en passant des arguments par programme en tant que liste de fichiers à exécuter. Vous pouvez voir le fichier complet ici ;J'ai créé une configuration de lancement qui exécutera le ./settings/mocha.js
en tant que program
et transmet les fichiers/modèles de fichiers que nous devons tester comme arguments:
{
"name": "Unit tests",
"type": "node",
"program": ".settings/mocha.js",
"stopOnEntry": true,
"args": ["test/unit/*.js", "test/unit/**/*.js"],
"cwd": ".",
"runtimeExecutable": null,
"env": { }
}
Donc, cela équivaut à faire mocha test/unit/*.js test/unit/**/*.js
et maintenant nous pouvons utiliser des points d'arrêt dans nos tests de moka.
Si vous ajoutez la variable $ {fichier} à la fin de la liste des arguments, vous pouvez lancer le débogage directement à partir du fichier que vous avez ouvert:
{
"type": "node",
"request": "launch",
"name": "Mocha Tests",
"program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
"args": [
"-u",
"tdd",
"--timeout",
"999999",
"--colors",
"${file}"
],
"internalConsoleOptions": "openOnSessionStart"
}
dans le fichier 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 du 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"
},
Désolé d’ajouter encore une réponse, mais aucune des réponses précédentes n’a fonctionné pour moi à partir du code VS 1.8.1 et du standard Node inclus dans le débogueur. Voici comment je l’ai résolu ( avec les conseils des réponses précédentes ici et de l’officiel Débogage VS Code = .js ) afin qu’il y ait un débogage en un clic/pression:
devDependency
dans packages.json
: "devDependencies": { "mocha": "^3.2", ... }
npm install
Dans le répertoire de votre package.json
Pour vous assurer que mocha est maintenant installé dans node_modules/
.vscode/launch.json
(Ou dans VS Code, appuyez sur F1, commencez à taper "launch" et sélectionnez "Debug: Open launch.json")launch.json
, Puis choisissez le nouveau nom de configuration dans la fenêtre de débogage dans VS Code et cliquez sur la flèche verte pour lancer le débogage de vos tests noeud + moka!Dans la nouvelle configuration dans 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 modèle test/**/*.js
Fonctionnera pour l'endroit où vous placez vos tests. Changer selon les besoins.
N'hésitez pas à modifier le port tant que vous le modifiez dans les propriétés args
et port
correspondantes.
La principale différence pour moi était de m'assurer que mocha était dans node_modules
, En utilisant program
pour désigner l'exécutable, et args
nécessitant que debug-brk=x
Pointant vers le port spécifié dans port
. Le reste de ce qui précède rend les choses plus belles et plus faciles.
C’est à vous et à votre équipe de placer ou non .vscode/launch.json
Dans le référentiel. C'est un fichier uniquement IDE, mais toute votre équipe pourrait l'utiliser comme ceci, pas de problème, car tous les chemins et installations sont relatifs et explicites.
Conseil: Le package.json
Peut inclure une balise scripts
qui lance également le moka avec quelque chose comme "test": "./node_modules/.bin/mocha"
, Mais il n’est pas utilisé par VS Code. Il est utilisé quand npm test
Est exécuté sur la ligne de commande. Celui-ci m'a confondu un peu. Notez-le ici au cas où d'autres seraient confus.
EDIT: VS Code 1.9.0 a ajouté une option "Ajouter une configuration" dans la liste déroulante de configuration de débogage, et vous pouvez choisir "Node.js Mocha Tests" pour simplifier la plupart des opérations ci-dessus. Vous devez toujours vous assurer que le moka est dans votre node_modules
Et que vous devrez peut-être mettre à jour le cwd
et le dernier runtimeArgs
(qui est le motif pour trouver vos tests) pour pointer vers le chemins appropriés. Mais une fois que vous définissez ces deux propriétés, cela devrait fonctionner à partir de là.
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 sourceMaps
et de définir 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 outFiles
pour inclure tout ce à quoi vous souhaitez ajouter un point d'arrêt. Cela peut être plus fastidieux dans un monorepo et plusieurs projets dépendants.
Cela fonctionne 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, d'ailleurs, j'ai essayé d'utiliser la variable% USERPROFILE% sans succès). Je peux maintenant définir des points d'arrêt dans mes tests de moka. 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 l'ont intégré dans les configurations -> Mocha Tests
.
Pour toute personne utilisant Windows. Si vous avez installé mocha globalement, configurer le programme sur le chemin suivant a fonctionné pour moi (échangez avec votre nom d'utilisateur).
"program": "C:\\Users\\myname\\AppData\\Roaming\\npm\\node_modules\\mocha\\bin\\_mocha"
Lorsque vous utilisez TypeScript, la configuration suivante fonctionne pour moi dans le code Visual Studio 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"
]
}
Il est important de noter ici que les cartes source sont générées et que le répertoire de sortie du fichier js est défini sur 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
index.ts
tout autre fichier TypeScript importémocha --debug-brk ./build/test/appTests.js
Si vous avez des dépendances dans le test, il est également facile de les joindre.
Par exemple, j'utilise mongo-unit-helper
avoir également des tests unitaires intégrés à Database.
package.json
le script est: mocha --recursive --require ./test/mongo-unit-helper.js --exit"
Ma launch.json
ressemble à:
"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 solution est de mettre --require
séparément dans args
dans launch.json
.
Voici un exemple de configuration de lancement (launch.json) de Microsoft, qui fonctionne avec Mocha et permet d'utiliser le débogueur.
De plus, il existe description comment utiliser l'option --debug-brk.
Enfin, voici une version alternative de la procédure de débogage du code avec les tests Mocha utilisant le fichier tasks.json de VS Code et du gestionnaire de tâches Gulp.
1) Aller à
.vscode
puis
launch.json
fichier
2) Ajoutez la configuration suivante dans 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) Définissez les points d'arrêt dans le fichier test, puis appuyez sur F5