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


101

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

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

Ответы:


83

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


2
У меня был специальный код, необходимый для инициализации документа и отключения горячей замены модуля. Передайте этот аргумент в "args"блоке:"--require", "${workspaceFolder}/tools/testSetup.js",
Kent Bull

1
VS Code 1.29.1: в Ctrl+Spaceавтоматически созданной конфигурации тестов Mocha не было debug-brk. Несмотря на то, что отладка с точками останова работала нормально.
Энтони

@Antony Да, долго debug-brkон больше не нужен, не поддерживается и не вставляется автоматически. Моя примечание только прояснило это, поскольку об этом упоминается во многих других ответах.
Фрэнк Нок

1
Мне пришлось вставить запятую после правой фигурной скобки моей (единственной) другой конфигурации, ctrl + spaceчтобы она работала.
GOTO 0

2
Актуальный пример правильной конфигурации Mocha см .: github.com/Microsoft/vscode-recipes/tree/master/…
Nux

70

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


12
Для всех, у кого проблемы. Обратите внимание на _mocha, а не на мокко. Только с мокко он будет запускать тесты в коде VS, но точки останова не
срабатывают

1
Для тех, кто использует TypeScript, это подходящий ответ, если вы установили sourceMaps: true. Спасибо огромное!
Брайан Рейнер

Чтобы добавить пользовательские параметры теста, совместимые с npm, добавьте что-то вроде npm_config_myparamблока env. Где на CLI это может выглядеть так npm --myparam=myvalue test.
bvj

44

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


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

Сделать это:

Запустите мокко из командной строки с помощью этой команды:

mocha --debug-brk

Теперь в VS Code щелкните значок «Отладка», затем выберите Attachпараметр рядом с кнопкой «Пуск». Добавьте точки останова в VS Code и нажмите кнопку «Пуск».


1
Этот способ намного проще, практически нет конфигурации
Андре Вермёлен

Вы должны добавить "request": "attach"файл launch.json, если он не существует - иначе он будет жаловаться, что вы должны указать программу или какую-либо другую ошибку.
jocull

Это вроде бы VS Codeконкретное. Не работает в нормальном VS 2015
Павел П.

отличный совет Спасибо :)
Gaurav Rawat

1
Обратите внимание, что в --debug-brkнастоящее время это не рекомендуется , поэтому я предлагаю автоматически создавать новую конфигурацию отладки в vscode , да, также специально для мокко.
Фрэнк

24

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


У меня не работает (в Windows) - но кажется хорошим решением, если оно работает :)
Вольфганг Клюге

Да. Извините OpenDebug process has terminated unexpectedly
Вольфганг Клюге

Можете попробовать установить "runtimeExecutable"в "C:/Program Files/nodejs/node.exe"или где установлен Node?
GPX

Конечно - но без изменений.
Вольфганг Клюге

Я не использую Windows, поэтому ничем не могу помочь. Однако следите за этим - они говорят об этой проблеме OpenDebug.
GPX

11

Я заставил его работать с 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.


Это заставило меня застрять на долгие годы. Я неправильно использовал путь от "which mocha", а не от node_modules. Спасибо!
PMac

11
  1. Перейти к Debug > Add Configuration... меню
  2. Выбрать Node.js среду
  3. Выбрать Mocha Tests вариант из появившегося выпадающего списка
  4. Введите путь к вашему тестовому файлу в качестве последнего элемента args свойства.
  5. Добавить breakpoint
  6. Нажмите на Debug значок
  7. Выбрать Mocha Tests в качестве конфигурации
  8. Нажмите Start debugging кнопку
  9. :-)

6

Я нашел способ сделать это, и классифицирую его как обходной путь . Я ожидаю, что команда Visual Studio Code предоставит более определенное решение для этого, но пока что я сделал следующее:

  1. Я создал ./settings/mocha.jsфайл, который запускает mocha, программно передавая аргументы в виде списка файлов для запуска. Вы можете увидеть полный файл здесь ;
  2. Я создал запуска конфигурации , которая будет работать ./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и теперь мы можем использовать точки останова в наших тестах мокко.


У меня не работает, не может найти тестовые файлы, пути верны. Я пробовал также с полными путями.
Симоне Джанни,

1
У меня тоже работает vscode 0.10.6. С точками останова в файлах .ts, с исходными картами я добавил 'sourceMaps': true, 'outDir': './build'в свою конфигурацию запуска.
Pyrho

4

Если вы добавите переменную $ {file} в конец списка аргументов, вы можете начать отладку прямо из открытого файла:

        {
            "type": "node",
            "request": "launch",
            "name": "Mocha Tests",
            "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
            "args": [
                "-u",
                "tdd",
                "--timeout",
                "999999",
                "--colors",
                "${file}"
            ],
            "internalConsoleOptions": "openOnSessionStart"
        }

2

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


2

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

2

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


1

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

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

1

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

1

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


1

При использовании 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чтобы включить все, что вы, возможно, захотите добавить точку останова. Это может быть более утомительным, когда в монорепозитории и нескольких зависимых проектах.


0

При использовании 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

отлаживать

  1. Вставьте точки останова в index.tsлюбой другой импортированный файл машинописного текста
  2. Откройте терминал и запустите: mocha --debug-brk ./build/test/appTests.js
  3. В VSC запустите конфигурацию запуска «Прикрепить».

0

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

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

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


0

Если у вас есть какая-то зависимость в тесте, ее также легко прикрепить.

Например, я использую 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.


0

Самое простое решение

Добавьте следующий код в файл 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"
            ],
        }
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.