Подтвердить что ты не робот

Точки прерывания Mocha с использованием кода Visual Studio

Можно ли добавить точки останова на те тесты Mocha с помощью кода Visual Studio?

Обычно при отладке кода необходимо настроить start.json, установив атрибут программы в исполняемый файл javascript. Я не уверен, как это сделать для Mocha.

4b9b3361

Ответ 1

Другой способ - использовать параметр командной строки --debug-brk для mocha и параметр запуска Attach по умолчанию для отладчика кода Visual Studio.


Предлагается более глубокое объяснение (от Андре)

Для этого:

Запустите mocha из командной строки, используя следующую команду:

mocha --debug-brk

Теперь в VS-коде нажмите значок Debug, затем выберите Attach из опции рядом с кнопкой запуска. Добавьте точки останова в код VS и нажмите кнопку "Пуск".

Ответ 2

Если вы не хотите использовать --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 поддерживает цвета.

Ответ 3

Я сделал эту работу над 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, который должен быть массивом ваших тестовых файлов.

Ответ 4

Как я получил его для работы с 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.

Ответ 5

Я понял способ сделать это, который я классифицирую как обходной путь. Я ожидаю, что команда 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": { }
    }
    

    Полный пример launch.json

Итак, это эквивалентно выполнению mocha test/unit/*.js test/unit/**/*.js, и теперь мы можем использовать точки останова в наших тестах мокко.

Ответ 6

Знаете ли вы, что вы просто заходите в конфигурацию запуска, поместите курсор после или между вашими другими конфигурациями и нажмите 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, по крайней мере).

Ответ 7

Для всех, кто использует Windows. Если вы установили mocha глобально, тогда программа установки на следующий путь работал у меня (swap в вашем имени пользователя).

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

Ответ 8

Извините за добавление еще одного ответа, но ни один из предыдущих не работал у меня как VS Code 1.8.1 и стандартного отладчика Node, включенных в него. Вот как я это решил (с рекомендациями из предыдущих ответов здесь и из официального VS Code Node.js Отладка docs), поэтому есть одна отладка нажатием кнопки /keypress:

  • Убедитесь, что mocha установлен как 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 (который является шаблоном для поиска ваших тестов), чтобы указать на соответствующие пути. Но как только вы установите эти два свойства, он должен работать в значительной степени оттуда.

Ответ 9

Это работает на машине 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"
    }

Ответ 10

Для тех, кто использует 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');};

Ответ 11

В VSCode версии 1.13.0 (macOS) они имеют встроенную конфигурацию → Mocha Tests.

Ответ 12

При использовании 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 любом другом импортированном файле typescript
  • Откройте терминал и запустите: mocha --debug-brk ./build/test/appTests.js
  • Из VSC запустите конфигурацию запуска "Прикрепить"

Ответ 13

Вот пример запустить конфигурацию (launch.json) от Microsoft, которая работает с Mocha и позволяет использовать отладчик.

Кроме того, существует описание о том, как использовать параметр --debug-brk.

Наконец, вот альтернативная версия того, как отлаживать код с помощью тестов Mocha, используя файл tasks.json VS Code и Gulp task второе место.

Ответ 14

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