Точки перерви Mocha за допомогою коду Visual Studio


101

Чи можна додати точки перерви до тестів Mocha, використовуючи Visual Studio Code?

Зазвичай при налагодженні коду потрібно конфігурувати файл start.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> = Версія 8 принаймні).


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

1
Код VS 1.29.1: Ctrl+SpaceАвтогенерована конфігурація Mocha Tests не мала debug-brk. Незважаючи на те, що налагодження з точки прориву спрацювало чудово.
Антоній

@Antony Так, протягом тривалого часу debug-brkце більше не потрібно використовувати, підтримувати або автоматично вставляти. Моя побічна записка лише прояснила це, оскільки в ньому згадуються багато інших відповідей.
Френк Нокк

1
Мені довелося вставити кому після правої дужки моєї (єдиної) іншої конфігурації для ctrl + spaceроботи.
GOTO 0


70

Якщо ви не хочете використовувати --debug-brk+ Приєднати або вказати абсолютний шлях до вашої глобальної установки mocha (що призведе до гальмування, якщо ви будете тримати ваш start.json під контролем версій і мати декількох розробників на різних машинах), встановіть mocha як залежність від розробника та додайте це до свого start.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, а не на mocha. Тільки 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 з командного рядка за допомогою цієї команди:

mocha --debug-brk

Тепер у коді VS натисніть на кнопку «Налагодження», а потім виберіть Attachіз параметра поруч із кнопкою «Пуск». Додайте точки переривання у коді VS та натисніть кнопку "Пуск"


1
Цей спосіб набагато простіше, конфігурації практично немає
Андре Вермеулен

Ви повинні додати "request": "attach"до start.json, якщо він не існує - інакше він скаржиться, що ви повинні вказати програму або іншу помилку.
Jocull

Це здається VS Codeспецифічним. Не працює в звичайному VS 2015
Павло П

чудова порада Спасибі :)
Gaurav Rawat

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

24

Я зробив цю роботу над VSCode в ОС 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"або, де встановлений Вузол?
GPX

Напевно - але без змін.
Вольфганг Клюге

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

11

Те, як я змусив його працювати над кодом VS (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.


Це затримало мене на віки. Я неправильно використав шлях від "котрих мок", а не 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": { }
    }

    Приклад повного запуску.json

Отже, це рівнозначно виконанню, mocha test/unit/*.js test/unit/**/*.jsі тепер ми можемо використовувати точки прориву у наших тестах на мокко.


Не працює для мене, він не може знайти тестові файли, шляхи правильні, я спробував також із повними шляхами.
Симоне Джанні

1
Це працює для мене також vscode 0.10.6. З точками переривання у файлах .ts, із вихідними картами, я додав 'sourceMaps': true, 'outDir': './build'до конфігурації запуску.
піро

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 налагодження ), так що є налагодження одним клацанням / натисканням клавіші:

  • Переконайтеся , що мокко встановлюються як devDependencyін packages.json:"devDependencies": { "mocha": "^3.2", ... }
  • Запустіть npm installу своєму каталозі, package.jsonщоб переконатися, що мока зараз встановленоnode_modules/
  • Відкрийте .vscode/launch.json(або в коді VS, натисніть F1, почніть вводити "запуск" і виберіть "Налагодження: відкрити запуск.json")
  • Клацніть синю кнопку "Додати конфігурацію" в нижньому правому куті (або просто скопіюйте та вставте одну з інших); цей крок необов’язковий ... Я маю на увазі, ви можете повторно використовувати наявний конфігурацію. Але я пропоную додати його, щоб він не був менш заплутаним.
  • Змініть наступне у своєму launch.json, а потім виберіть нове ім’я конфігурації у вікні налагодження у коді VS та натисніть зелену стрілку, щоб почати налагодження вашого вузла + мок-тестів!

У новій конфігурації в 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 - замість цього він використовується, коли npm testзапускається в командному рядку. Цей трохи заплутав мене. Відзначивши це тут, якщо інші теж заплутаються.

EDIT: Код VS 1.9.0 додав параметр "Додати конфігурацію" у спадному меню конфігурації налагодження, і ви можете вибрати "Модельні тести Node.js", які допоможуть спростити більшу частину вищезазначеного. Вам все-таки потрібно переконатися, що мока є у вас, node_modulesі, можливо, доведеться оновити cwdостанній runtimeArgs(що є зразком для пошуку ваших тестів), щоб вказати на відповідні шляхи. Але як тільки ви встановите ці два властивості, він звідти повинен працювати набагато.


2

в start.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

Для всіх, хто використовує Windows. Якщо ви встановили мочу в усьому світі, тоді встановлення програми на наступний шлях працював для мене (поміняйте своє ім'я користувача).

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

1

Це працює у мене на машині Windows 7. У мене встановлено мочу в усьому світі, але ця конфігурація вказує на встановлення проекту, щоб уникнути необхідності шляху до профілю користувача (який btw, я намагався використовувати змінну% 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

Для тих, хто використовує грунт або глот, конфігурація досить проста.

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


1

1) Перейти до

.vscode

тоді

start.json

файл

2) Додайте таку конфігурацію у start.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


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 запустіть конфігурацію запуску "Attach"

0

Ось приклад конфігурації запуску (launch.json) від Microsoft, яка працює з Mocha і дозволяє використовувати налагоджувач.

Також є опис того, як використовувати параметр --debug-brk.

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


0

Якщо у вас є певна залежність у тесті, її також легко прикріпити.

Наприклад, я mongo-unit-helperтакож використовую тести, інтегровані в Database.

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.