Можно ли добавить точки останова на те тесты Mocha с помощью кода Visual Studio?
Обычно при отладке кода необходимо настроить start.json, установив атрибут программы в исполняемый файл javascript. Я не уверен, как это сделать для Mocha.
Можно ли добавить точки останова на те тесты Mocha с помощью кода Visual Studio?
Обычно при отладке кода необходимо настроить start.json, установив атрибут программы в исполняемый файл javascript. Я не уверен, как это сделать для Mocha.
Другой способ - использовать параметр командной строки --debug-brk
для mocha и параметр запуска Attach
по умолчанию для отладчика кода Visual Studio.
Предлагается более глубокое объяснение (от Андре)
Для этого:
Запустите mocha из командной строки, используя следующую команду:
mocha --debug-brk
Теперь в VS-коде нажмите значок Debug, затем выберите Attach
из опции рядом с кнопкой запуска. Добавьте точки останова в код VS и нажмите кнопку "Пуск".
Если вы не хотите использовать --debug-brk
+ Прикрепить или указать абсолютный путь к вашей глобальной установке мокко (что будет тормозить, если вы сохраните свой запуск .json под управлением версии и имеете несколько разработчиков на разных машинах), установите mocha как зависимость dev и добавьте это в ваш 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"
}
}
Полная поддержка отладки в ваших тестах, просто нажав F5.
--no-timeouts
гарантирует, что ваши тесты не будут отключены, потому что вы остановились на точке останова, а --colors
гарантирует, что Mocha выводит цвета, даже если он не обнаруживает, что VS Code поддерживает цвета.
Я сделал эту работу над VSCode на OS X 10.10. Просто замените файл ./settings/launch.json
на это.
{
"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"}
}
]
}
Он также доступен как gist здесь.
Ключевыми значениями, которые необходимо изменить, являются program
, которые должны быть установлены в исполняемый файл _mocha
и args
, который должен быть массивом ваших тестовых файлов.
Как я получил его для работы с VS Code (1.8.2) в 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 необходимо установить в каталоге модулей npm.
Я понял способ сделать это, который я классифицирую как обходной путь. Я ожидаю, что команда Visual Studio Code предоставит более окончательное решение для этого, но пока что то, что я сделал:
./settings/mocha.js
, который запускает mocha, программно передавая аргументы в виде списка файлов, которые будут запущены. Вы можете увидеть полный файл здесь;Я создал конфигурацию запуска, которая будет запускать ./settings/mocha.js
как program
и передает шаблоны файлов/файлов, которые нам нужно проверить в качестве аргументов:
{
"name": "Unit tests",
"type": "node",
"program": ".settings/mocha.js",
"stopOnEntry": true,
"args": ["test/unit/*.js", "test/unit/**/*.js"],
"cwd": ".",
"runtimeExecutable": null,
"env": { }
}
Итак, это эквивалентно выполнению mocha test/unit/*.js test/unit/**/*.js
, и теперь мы можем использовать точки останова в наших тестах мокко.
Знаете ли вы, что вы просто заходите в конфигурацию запуска, поместите курсор после или между вашими другими конфигурациями и нажмите ctrl - space, чтобы получить текущую, действительную конфигурацию mocha автоматически сгенерированную?
Что работает отлично для меня. Включая остановку в контрольных точках. (У меня также был предыдущий, теперь устаревший, который больше не по различным причинам, связанным с настройкой.)
Как и VSCode 1.17 (октябрь 2017), это дает:
{
"type": "node",
"request": "launch",
"name": "my Mocha Tests",
"program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
"args": [
// I removed some lines here
// check for yourself if you need them
"${workspaceFolder}/test"
],
"internalConsoleOptions": "openOnSessionStart"
}
На боковой ноте: debug-brk
исправлено (для любого, у кого Node >= версия 8, по крайней мере).
Для всех, кто использует Windows. Если вы установили mocha глобально, тогда программа установки на следующий путь работал у меня (swap в вашем имени пользователя).
"program": "C:\\Users\\myname\\AppData\\Roaming\\npm\\node_modules\\mocha\\bin\\_mocha"
Извините за добавление еще одного ответа, но ни один из предыдущих не работал у меня как VS Code 1.8.1 и стандартного отладчика Node, включенных в него. Вот как я это решил (с рекомендациями из предыдущих ответов здесь и из официального VS Code Node.js Отладка docs), поэтому есть одна отладка нажатием кнопки /keypress:
devDependency
в packages.json
: "devDependencies": { "mocha": "^3.2", ... }
npm install
в каталоге вашего package.json
, чтобы убедиться, что mocha теперь установлена в node_modules/
.vscode/launch.json
(или в VS Code, нажмите F1, начните вводить "запуск" и выберите "Debug: Open launch.json" )launch.json
, затем выберите новое имя конфигурации в окне отладки в коде VS и нажмите зеленую стрелку, чтобы начать отладку тестов Node + mocha!В новой конфигурации в 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
}, ...]
Это предполагает, что шаблон test/**/*.js
будет работать там, где вы ставите свои тесты. При необходимости измените.
Не забудьте изменить порт, если вы измените его в обоих свойствах args
и port
, чтобы они соответствовали.
Ключевыми отличиями для меня были то, что mocha находился в node_modules
, используя program
, чтобы указать на исполняемый файл, а args
нуждался в debug-brk=x
, указывая на порт, указанный в port
. Остальная часть выше просто делает вещи красивее и проще.
Это вам и вашей команде, если вы поместите .vscode/launch.json
в репозиторий или нет. Это IDE файл, но вся ваша команда может использовать его так, без проблем, поскольку все пути и установки являются относительными и явными.
Совет. package.json
может включать тег scripts
, который также запускает mocha с чем-то вроде "test": "./node_modules/.bin/mocha"
, но он не используется VS Code - вместо этого он используется, когда npm test
запускается в командной строке, Это немного смутило меня. Отмечая это здесь, если другие тоже путаются.
EDIT: VS Code 1.9.0 добавила опцию "Добавить конфигурацию" в раскрывающемся меню конфигурации отладки, и вы можете выбрать "Node.js Mocha Tests", которые упрощают большинство из вышеперечисленных. Вам все равно нужно убедиться, что mocha находится в вашем node_modules
и, возможно, вам придется обновить cwd
и last runtimeArgs
(который является шаблоном для поиска ваших тестов), чтобы указать на соответствующие пути. Но как только вы установите эти два свойства, он должен работать в значительной степени оттуда.
Это работает на машине Windows 7. У меня есть мокка, установленная по всему миру, но эта конфигурация указывает на установку проекта, чтобы избежать необходимости в пути к профилю пользователя (что, кстати, я пробовал использовать% USERPROFILE% variable без успеха). Теперь я могу установить контрольные точки в своих тестах мокки. Ура!
{
"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"
}
Для тех, кто использует grunt или gulp, конфигурация довольно проста.
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');};
В VSCode версии 1.13.0 (macOS) они имеют встроенную конфигурацию → Mocha Tests
.
При использовании TypeScript следующая конфигурация работает для меня в 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"
]
}
Важно отметить, что исходные карты сгенерированы и что выходной каталог для js установлен на 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"
}
Обратите внимание, что sourceMaps
установлен на true
и что для параметра outDir
установлено значение build
для отладки
index.ts
любом другом импортированном файле typescriptmocha --debug-brk ./build/test/appTests.js
Вот пример запустить конфигурацию (launch.json) от Microsoft, которая работает с Mocha и позволяет использовать отладчик.
Кроме того, существует описание о том, как использовать параметр --debug-brk.
Наконец, вот альтернативная версия того, как отлаживать код с помощью тестов Mocha, используя файл tasks.json VS Code и Gulp task второе место.
в launch.json, добавьте еще одну конфигурацию ниже
{
"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"
},
если вам нужно настроить версию node, просто добавьте поле runtimeExecutable
, подобное этому
{
"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"
},