Можно ли добавить точки останова в тесты Mocha с помощью кода Visual Studio?
Обычно при отладке кода необходимо настроить launch.json, установив атрибут программы для файла javascript для выполнения. Однако я не уверен, как это сделать для Mocha.
Можно ли добавить точки останова в тесты Mocha с помощью кода Visual Studio?
Обычно при отладке кода необходимо настроить launch.json, установив атрибут программы для файла javascript для выполнения. Однако я не уверен, как это сделать для Mocha.
Ответы:
Знаете ли вы, что вы просто заходите в свою конфигурацию запуска, помещаете курсор после других конфигураций или между ними и нажимаете ctrl-, spaceчтобы получить автоматически сгенерированную текущую действительную конфигурацию мокко?
Что отлично работает для меня. Включая остановку в точках останова. (У меня также был предыдущий, теперь устаревший, который больше не работал по разным причинам, связанным с настройками.)
Начиная с VSCode 1.21.1 (март 2018 г.) это дает:
{
"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
}
}
На заметку: debug-brk
устарел (по крайней мере, для всех, у кого Node> = Version 8).
Ctrl+Space
автоматически созданной конфигурации тестов Mocha не было debug-brk
. Несмотря на то, что отладка с точками останова работала нормально.
debug-brk
он больше не нужен, не поддерживается и не вставляется автоматически. Моя примечание только прояснило это, поскольку об этом упоминается во многих других ответах.
ctrl + space
чтобы она работала.
Если вы не хотите использовать --debug-brk
+ Attach или указывать абсолютный путь к вашей глобальной установке mocha (что будет тормозить, если вы сохраните свой launch.json под контролем версий и у вас будет несколько разработчиков на разных машинах), установите mocha как зависимость разработчика и добавьте это в свой 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 поддерживает цвета.
sourceMaps: true
. Спасибо огромное!
npm_config_myparam
блока env. Где на CLI это может выглядеть так npm --myparam=myvalue test
.
Другой способ - использовать параметр --debug-brk
командной строки mocha и настройку Attach
запуска по умолчанию отладчика Visual Studio Code.
Предлагаемое более глубокое объяснение (от Андре)
Сделать это:
Запустите мокко из командной строки с помощью этой команды:
mocha --debug-brk
Теперь в VS Code щелкните значок «Отладка», затем выберите Attach
параметр рядом с кнопкой «Пуск». Добавьте точки останова в VS Code и нажмите кнопку «Пуск».
"request": "attach"
файл launch.json, если он не существует - иначе он будет жаловаться, что вы должны указать программу или какую-либо другую ошибку.
VS Code
конкретное. Не работает в нормальном VS 2015
--debug-brk
настоящее время это не рекомендуется , поэтому я предлагаю автоматически создавать новую конфигурацию отладки в vscode , да, также специально для мокко.
Я проделал эту работу над 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"}
}
]
}
Его также можно найти здесь .
Ключевыми значениями, которые вам нужно изменить, являются program
:, которые должны быть установлены для _mocha
исполняемого файла, и args
, которые должны быть массивом ваших тестовых файлов.
OpenDebug process has terminated unexpectedly
"runtimeExecutable"
в "C:/Program Files/nodejs/node.exe"
или где установлен Node?
Я заставил его работать с 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.
Debug > Add Configuration...
менюNode.js
средуMocha Tests
вариант из появившегося выпадающего спискаargs
свойства.breakpoint
Debug
значокMocha Tests
в качестве конфигурацииStart debugging
кнопкуЯ нашел способ сделать это, и классифицирую его как обходной путь . Я ожидаю, что команда 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
и теперь мы можем использовать точки останова в наших тестах мокко.
'sourceMaps': true, 'outDir': './build'
в свою конфигурацию запуска.
Если вы добавите переменную $ {file} в конец списка аргументов, вы можете начать отладку прямо из открытого файла:
{
"type": "node",
"request": "launch",
"name": "Mocha Tests",
"program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
"args": [
"-u",
"tdd",
"--timeout",
"999999",
"--colors",
"${file}"
],
"internalConsoleOptions": "openOnSessionStart"
}
Извините за добавление еще одного ответа, но ни один из предыдущих ответов не работал у меня с VS Code 1.8.1 и включенным в него стандартным отладчиком Node. Вот как я это решил (с помощью предыдущих ответов здесь и из официальных документов VS Code Node.js Debugging ), поэтому есть отладка одним щелчком / нажатием клавиши:
devDependency
в packages.json
:"devDependencies": { "mocha": "^3.2", ... }
npm install
в своем каталоге, package.json
чтобы убедиться, что мокко теперь установлен вnode_modules/
.vscode/launch.json
(или в VS Code нажмите F1, начните вводить «запуск» и выберите «Отладка: открыть launch.json»)launch.json
, затем выберите новое имя конфигурации в окне отладки в VS Code и нажмите зеленую стрелку, чтобы начать отладку тестов 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
свойств , чтобы соответствовать.
Ключевыми отличиями для меня было обеспечение наличия мокко node_modules
, использование program
для указания на исполняемый файл и args
необходимость debug-brk=x
указания порта, указанного в port
. Остальное только делает вещи красивее и проще.
Вам и вашей команде решать, помещать вы .vscode/launch.json
в репозиторий или нет. Это файл только для IDE, но вся ваша команда может использовать его таким образом, без проблем, поскольку все пути и установки являются относительными и явными.
Совет: package.json
может включать scripts
тег, который также запускает мокко с чем-то вроде "test": "./node_modules/.bin/mocha"
, но он не используется VS Code - вместо этого он используется при npm test
запуске из командной строки. Это немного смутило меня. Отметив это здесь, если другие тоже запутаются.
РЕДАКТИРОВАТЬ: VS Code 1.9.0 добавил параметр «Добавить конфигурацию» в раскрывающемся списке конфигурации отладки, и вы можете выбрать «Тесты Node.js Mocha», которые помогают упростить большую часть вышеперечисленного. Вам все равно нужно убедиться, что мокко в вашемnode_modules
и, возможно, придется обновить cwd
и последний runtimeArgs
(который является шаблоном для поиска ваших тестов), чтобы указать на соответствующие пути. Но как только вы установите эти два свойства, они должны работать в значительной степени оттуда.
в launch.json добавьте еще 1 конфигурацию ниже
{
"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
такое поле
{
"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"
},
1) Перейти к
.vscode
затем
launch.json
файл
2) Добавьте следующую конфигурацию в 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) Установите точки останова в тестовом файле и нажмите F5
Это работает для меня на машине с Windows 7. У меня есть мокко, установленный глобально, но эта конфигурация указывает на установку проекта, чтобы избежать необходимости в пути к профилю пользователя (который, кстати, я пытался использовать переменную% USERPROFILE%, но безуспешно). Теперь я могу устанавливать точки останова в своих тестах мокко. Ура!
{
"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');};
При использовании Babel или создании файлов javascript, но с размещением точек останова в источнике - вы должны обязательно включить sourceMaps
и определить outFiles
. Вот пример конфигурации, которая у меня сработала.
{
"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,
},
Примечание. Вам нужно будет изменить, outFiles
чтобы включить все, что вы, возможно, захотите добавить точку останова. Это может быть более утомительным, когда в монорепозитории и нескольких зависимых проектах.
При использовании 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
любой другой импортированный файл машинописного текстаmocha --debug-brk ./build/test/appTests.js
Вот пример конфигурации запуска (launch.json) от Microsoft, которая работает с Mocha и позволяет использовать отладчик.
Также есть описание того, как использовать параметр --debug-brk.
Наконец, вот альтернативная версия того, как отлаживать код с помощью тестов Mocha, используя файл tasks.json VS Code и Gulp task runner.
Если у вас есть какая-то зависимость в тесте, ее также легко прикрепить.
Например, я использую mongo-unit-helper
также модульные тесты, интегрированные с базой данных.
package.json
сценарий: mocha --recursive --require ./test/mongo-unit-helper.js --exit"
Мой launch.json
выглядит так:
"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"
}
]
Решение - поставить --require
отдельно args
в launch.json
.
Самое простое решение
Добавьте следующий код в файл launch.json внутри папки .vscode:
{
"name": "Unit tests",
"type": "node",
"request": "launch",
"program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
"args": [
],
}
Однако вы можете также добавить аргумент тайм-аута:
{
"name": "Unit tests",
"type": "node",
"request": "launch",
"program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
"args": [
"--timeout",
"999999"
],
}
"args"
блоке:"--require", "${workspaceFolder}/tools/testSetup.js",