какой путь наименьшего сопротивления к отладке тестов мокко?

Изменить ноябрь 2016: теперь у Node есть встроенный отладчик, который можно начать с --inspect. Этот ответ объясняет это: https://stackoverflow.com/a/39901169/30946.

Я создаю тест мокко в coffeescript. В самом верху теста у меня есть:

require "../assets/js/theObject.coffee"
debugger
ss = new TheObject()

Я хотел бы остановиться на этой строке отладчика, потому что объект в theObject.coffee не загружается. Я использую инспектор узлов, и он работает, вроде как.

Процесс, который у меня есть:

  1. запустить нод-инспектор
  2. запустите тест в командной строке с mocha --compilers coffee:coffee-script ./test/theObjectTests.coffee --ui bdd -d --debug-brk
  3. перейдите на страницу инспектора узлов, обновите ее, если она уже открыта
  4. дождитесь загрузки файла theObject.coffee, затем установите точку останова в нужной строке

Должен быть способ попроще. Похоже, я должен иметь возможность запустить отладчик и просто остановить его на этой строке отладчика, но я не могу этого найти.

У меня есть WebStorm с отладчиком (эта статья обсуждает настройку его для запуска тестов мокко, но мне это не помогло), но когда я запускаю его, он терпит неудачу. В окне отладки WebStorm выполняется следующая команда:

"C:\Program Files\nodejs\node.exe" --debug-brk=64232 C:\Users\jcollum\AppData\Roaming\npm\_mocha

C:\Users\jcollum\AppData\Roaming\npm\_mocha:2
basedir=`dirname "$0"`

Я подозреваю, что это может быть проблема, связанная с Windows.

Env: Windows 7, Webstorm, узел 0.8.16, mocha 1.7.4, git-bash

Вопрос: если вы начинаете с нуля с Mocha, какой самый простой способ запустить отладчик, который легко останавливался бы на строке отладчика? Ключевое слово здесь - просто.

Изменить: с тех пор, как я спросил об этом, я перестал использовать Windows и работаю в Ubuntu. Мой процесс отладки мокко (который я использую нечасто) такой же.


person jcollum    schedule 11.01.2013    source источник
comment
См. Мой ответ на связанный вопрос о том, что мне подходит: stackoverflow.com/a/29351654/3304034   -  person Jacob McKay    schedule 31.03.2015


Ответы (10)


Изменить, годы спустя: кратчайший путь в Node 6+: mocha --debug-brk --inspect ./test.js в сочетании с подключаемым модулем Node Inspector Manager.

Спустя много недель никаких ответов. Вот самый быстрый путь, который я нашел.

  1. написать тесты мокко
  2. установить node-inspector
  3. start node-inspector - теперь он будет слушать на 5858
  4. начать тест мокко с --debug-brk
  5. на этом этапе тест мокко приостанавливается на первой строке
  6. откройте веб-браузер и перейдите на localhost: 5858
  7. (необязательно: добавьте строку отладчика вверху вашего тестового файла, установите точки останова после остановки в этом файле)
  8. нажмите F10, чтобы запустить код
  9. node-Inspector остановится на любой строке, на которой есть debugger. Иногда он не перемещает окно файла кода в нужное место, поэтому вам придется нажать F10, чтобы заставить его перейти к следующей строке и показать, где оно находится в файле.

Командная строка:

node-inspector & mocha --compilers coffee:coffee-script/register ./test/appTests.coffee --ui bdd -d -g "should X then Y" --debug-brk

person jcollum    schedule 08.04.2013
comment
это лучшее, что я нашел. Если вы когда-нибудь найдете способ получше, обновите этот ответ :) - person captainclam; 04.07.2013
comment
идея теста состоит в том, чтобы он был как можно более детализированным, маленьким и легким для написания, чтобы было легко очевидно, какова логика, лежащая в основе теста. Если вам нужно отладить свои тесты, вы делаете это неправильно ... точка. Найдите способ разбить тесты на очень маленькие части, иначе вы никогда не закончите тестирование, и все, что вам удалось протестировать, скорее всего, будет слишком ненадежным, чтобы кто-либо мог сказать, что программное обеспечение готово к производству. - person Dmitry Matveev; 24.01.2014
comment
@DmitryMatveev иногда мокко не выходит из строя, он просто сидит. Для этого полезна отладка. Вы много думаете о моем коде, основываясь на моем вопросе. - person jcollum; 25.01.2014
comment
@jcollum, не поймите меня неправильно 'j'. это как раз то, во что я верю относительно того, какими должны быть тесты. И да, описанная вами ситуация мне знакома, и угадайте, как я убедился, что это не проблема в тесте :) чистая простота. просто взглянув на него (обратите внимание, а не отлаживая его), стало ясно, что на самом деле тестируемое приложение не возвращало ответ, в результате чего тесты мокко оставались там навсегда. Исходя из своего опыта, я отстаиваю точку: упростите их и избегайте тестирования, чтобы проверить, действительно ли ваши тесты проверяют - person Dmitry Matveev; 25.01.2014
comment
@DmitryMatveev Вы описываете модульный тест. Есть несколько других типов тестов, отладка которых очень удобна. - person Derek Prior; 01.05.2014
comment
@Dmitry - даже небольшие и простые тесты могут быть неверно истолкованы - отладчик может подтвердить ваши ожидания. - person Kieran Ryan; 28.10.2015
comment
@KieranRyan - вернемся к моей точке зрения, и я чувствую, что провел большое количество тестов на работе, чтобы отстоять свою точку зрения ... если тест можно неверно истолковать, то это плохо спроектированный тест ... вот и все, другой альтернативы нет ... перепроектируйте свои тесты таким образом, чтобы не было абсолютно никаких сомнений в том, что должен тестировать отдельный тестовый пример. - person Dmitry Matveev; 29.10.2015
comment
@DmitryMatveev - так что, если я правильно это читаю, в идеальном мире никому не нужны отладчики, потому что все всегда все используют TDD, и они все делают правильно. Я полностью согласен. Что ж, пора вернуться в реальный мир, где я стараюсь проводить по несколько часов каждый день! - person max; 16.12.2015
comment
Конечно, когда тест полностью проваливается, и вы абсолютно не знаете, какой код вызывает ошибку, полезно иметь возможность запустить отладчик и посмотреть, где произошло исключение, даже если оно было обнаружено. И вы можете сделать это, скажем, с помощью Visual Studio Code, просто настроив отладчик на запуск Mocha и выбрав Все исключения или Неперехваченные исключения перед нажатием F5 для запуска. Я вставляю только тестовый пример, в котором есть ошибка, затем нажимаю F5, и он падает прямо на строку с ошибкой. - person Eric Blade; 11.09.2018

В дополнение к ответу @ jcollum выше я обнаружил, что вместо использования флага --debug-brk лучше просто использовать флаг --debug с -w (смотреть)

Таким образом, когда вы добавляете и удаляете строки отладчика из своего кода, mocha автоматически перезагружает тесты, а ваш инспектор узлов останавливается на соответствующей строке.

Это избавляет от необходимости повторно посещать терминал, постоянно перезапускать тесты, а затем без необходимости нажимать «продолжить» в отладчике, чтобы пройти первую строку исходного кода.

person captainclam    schedule 19.03.2014
comment
У меня возникли проблемы с получением решения jcollums, работающего в OS X. Исходный файл и файлы спецификации, похоже, не загружались в инспектор узлов. Это сработало для меня. - person John Galambos; 24.03.2015
comment
Я получаю Error: Injection failed: no require in current frame. с --debug. Даже пробовал с --no-preload, но все равно приходится нажимать Пауза и Воспроизведение. - person user; 10.04.2016

В последних версиях Mocha и node-Inspector у меня все отлично работает:

$ node-debug ./node_modules/mocha/bin/_mocha

Он загружает локальный исполняемый файл Mocha как отлаживаемый процесс, останавливаясь на первой строке, чтобы вы могли установить точки останова.

person doingweb    schedule 21.06.2015

Обратите внимание на http://s-a.github.io/iron-node/. Это наиболее эффективное программное обеспечение для отладки всего, что связано с Node.js.

$ iron-node ./node_modules/mocha/bin/_mocha

введите описание изображения здесь

введите описание изображения здесь

person Stephan Ahlf    schedule 17.08.2015
comment
Не могли бы вы уточнить? Что лучше этого по сравнению с инспектором узлов? - person jcollum; 23.03.2016
comment
всего несколько вещей ... ironNode поддерживает темы. ironNode не использует WebSockets или что-то в этом роде. (Нет сообщений о потере связи или что-то в этом роде). ironNode работает независимо от установки локального узла, потому что у него есть собственный. Никаких слишком быстрых скриптов для прикрепления проблем отладчика. Для запуска сеанса отладки не требуется --debug-brk или другие действия. Нет пользовательского интерфейса при странном поведении. НЕТ пользовательский интерфейс не загружается или не работает, а обновление не помогло поведению. Никакому отладчику не требуется много времени для запуска поведения. :) просто попробуйте. Я использую исключительно - person Stephan Ahlf; 23.03.2016
comment
Для меня это намного быстрее, чем инспектор узлов. Спасибо, что разместили это. - person Peter Majeed; 16.04.2016

Альтернативный способ использования отладчика узлов WebStorm.

Короче:

  1. Вам нужен WebStorm
  2. Создать новый профиль отладки узла в WebStorm
  3. Установите путь к вашему двоичному файлу мокко в Path to Node App JS File
  4. Добавьте точки останова и запустите сеанс из WebStorm

Подробная инструкция со скриншотами автора Гленн Блок.

person Brock    schedule 07.10.2013
comment
Я пробовал это, когда впервые получил Webstorm. Не мог заставить его работать, сдался. Я нашел это сообщение в блоге очень давно. - person jcollum; 07.10.2013
comment
Странно, угадать невезение. В последнее время это сработало для меня как шарм, и мне очень понравилось, насколько легко это было настроить. Подумайте о том, чтобы попробовать еще раз :) - person Brock; 14.10.2013
comment
Сообщение в блоге устарело. Мне больше удалось увидеть этот пример настройки: youtube.com/watch?v=4mKiGkokyx8&feature = youtu.be - person k0pernikus; 10.08.2017

Если это приложение Node, то использование встроенного отладчика Node из командной строки - самый быстрый путь к успеху:

$ mocha $args -- debug
person Filip Dupanović    schedule 05.03.2016

Теперь в Webstorm вы можете просто настроить, используя конфигурацию mocha. Для меня работает довольно много из коробки:

Node interpreter: /usr/local/bin/node
Working directory: /Users/me/sites/mysite
Mocha Package: /Users/me/sites/mysite/node_modules/mocha

а потом

All in directory
Test directory: /Users/me/sites/mysite/test

Он также показывает вам параметры, с которыми он работает, поэтому вы, вероятно, можете скопировать их в другую среду, если вам нужно.

person timhc22    schedule 08.12.2015
comment
Да! @ Дерево, он остановится на этом - person timhc22; 17.09.2018

Что касается Webstorm или PhpStorm, вы можете добавить определенную конфигурацию отладки mocha:

Конфигурация отладки

Вам нужно будет добавить через зеленый цвет, вы можете дать ему имя.

Если мокко уже установлен в проекте через:

 npm install mocha --save

or

 yarn add mocha

он найдет соответствующий модуль в вашем проекте.

Мне нужно было указать правильный путь к моим модульным тестам и попасть в отметку Include subdirectories /

Поскольку мой проект является машинописным, мне пришлось добавить:

yarn add ts-node

Для проекта на чистом js в этом нет необходимости.

Теперь вы можете запустить весь набор тестов, а затем выбрать отдельные тестовые примеры из списка, запустить их и отладить самостоятельно.

person k0pernikus    schedule 10.08.2017

Ни в одном из существующих ответов не упоминается путь наименьшего сопротивления: когда вам нужно отладить тесты Mocha, вы можете просто добавить еще одно утверждение, которое проверяет значение, которое вы хотите отладить .

myVar.should.equal(expected);

Я часто считаю, что это все, что мне нужно. И я просто удаляю лишние утверждения, которые я использовал для отладки, когда закончу.

person Cory House    schedule 20.03.2016

Современный способ сделать это - использовать функцию интеграции инспектора nodejs. Пользоваться им довольно просто. Я уже написал подробное объяснение того, как его использовать в этот пост

person stropitek    schedule 26.11.2016
comment
Обновил вопрос. - person jcollum; 26.11.2016