Можно ли добавить точки останова на те тесты 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"
    },