Как заставить QUnit печатать трассировку при исключении? - PullRequest
5 голосов
/ 02 апреля 2012

Когда в моих тестах QUnit возникает исключение, все, что он говорит, это

Died on test #n: message

Как мне заставить его напечатать обратную трассировку или другую информацию о местоположении, чтобы я мог видеть, где произошло исключение?

Ответы [ 2 ]

5 голосов
/ 03 апреля 2012

Я не думаю, что можно заставить QUnit подсказать, где произошла ошибка. Ваш код сгенерировал исключение, которое QUnit обнаружил и сообщил. Если вы отметите флажок «notrycatch» в верхней части результатов QUnit, ваши тесты будут запущены снова, но на этот раз QUnit не поймает исключение. Ваш браузер может затем предоставить вам больше информации о том, что на самом деле произошло, но это будет зависеть от того, в чем заключалась ошибка.

0 голосов
/ 03 апреля 2012

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

Поскольку вы пишете «Когда в моих тестах QUnit возникает исключение», позвольте мне объяснить концепцию тестирования немного глубже:

Прежде всего: Исключение не возникает в ваших тестах QUnit, но в вашем коде. Хорошая новость: qUnit в вашем случае делает именно то, что должно: тестирует ваш коди, поскольку ваш код неисправен, он выдает исключение при тестировании.

Поскольку qUnit является средой тестирования, он не несет ответственности за доставку трассировок исключений.Он только для того, чтобы проверить, работает ли реализованная вами функциональность так, как вы ожидаете, а не для отслеживания ошибок.Для таких целей инструменты, такие как FireBug или Safari, являются гораздо более подходящими.

Позвольте мне описать сценарий:

  1. вы пишете функцию
  2. вы устраняете ошибки в ней с помощью (т.е.) FireBug
  3. вы пишетеТестовый набор qUnit для подтверждения того, что функция действительно выполняет то, что вам нужно - тесты проходят
  4. (и теперь это становится интересным, потому что именно для этого и нужно тестирование). Вы добавляете некоторую дополнительную функциональность в свою функцию, потому чтоэто необходимо
  5. Если вы все сделали правильно, ваши тесты пройдены, и вы можете быть уверены, что все будет работать должным образом, потому что они работают (если вы их хорошо написали)

Подводя итог: Тесты предназначены не для отладки, а для гарантии того, что все работает так, как вы думаете, они работают. Если появляется ошибка, вы не пишете тест для ее устранения, а пишетепроверить, чтобы воспроизвести его.Тогда вы найдете ошибку, удалите ее, и тест пройдет.Если ошибка будет заново изобретена позже (т. Е. Из-за изменений кода), тест снова будет неудачным, и вы сразу узнаете, что ошибка вернулась.

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

  1. вы пишете тест, описывающий ожидаемые результаты вашего кода
  2. вы пишете код, когда появляются ошибки, вы отслеживаете их с помощью (т.е. Firebug
  3. во время выполнения, один тест за другим начнет проходить
  4. при добавлении дополнительной функциональности, вы сначала пишете дополнительные тесты

Есть дваосновные преимущества в этом:

  1. вы можете быть уверены, что у вас есть необходимые тесты, и
  2. вы будете вынуждены точно определить, что вы хотите, чтобы ваш код делал, потому что в противном случае вы можетене пишите тесты.

Счастливого тестирования.

конец редактирования - следует оригинальный ответ, на всякий случай, если он необходим.

При использовании QUnit я настоятельно рекомендую следовать подходу, показанному на сайте документации jQuery http://docs.jquery.com/Qunit:

Чтобы использовать QUnit, вы должны включить его файлы qunit.js и qunit.css и предоставить основныеHTML структура для dВоспроизведение результатов теста:

Все, что вам нужно сделать, это загрузить файлы qunit.js и qunit.css, а затем поместить этот фрагмент на свою страницу, чтобы получить визуальный отзыв о процессе тестирования:

<h1 id="qunit-header">QUnit example</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<div id="qunit-fixture">test markup, will be hidden</div>

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

qUnit test results

Чтобы настроить сообщения об ошибках, отображаемые qUnit, вам просто нужно добавить строку, которая будет показана в вашем тесте.Поэтому вместо

ok($('.testitem:first').is(':data(droppable)'))

используйте

ok($('.testitem:first').is(':data(droppable)'),
    "testitem is droppable after calling setup_items('.testitem')");

, чтобы получить сообщение об ошибке, показанное на рисунке.В противном случае qUnit возвращается к некоторому стандартному сообщению об ошибке, связанному с используемым тестом.

...