На работе мы только что начали работу с приложением, в значительной степени основанным на Javascript (на самом деле использующим Coffeescript, но все же), из которого я внедряю автоматизированную систему тестирования с использованием JsTestDriver и fabric.
Мы никогда не писали что-либо с таким большим количеством Javascript, поэтому до сих пор мы никогда не проводили никакого тестирования Javascript. Я не уверен, что именно мы должны тестировать в наших модульных тестах. Мы написали плагины JQuery для разных вещей, поэтому совершенно очевидно, что они должны быть максимально проверены на корректность с помощью JsTestDriver, но все остальные в моей команде, похоже, считают, что мы должны также тестировать Javascript на уровне страницы.
Я не думаю, что мы должны тестировать Javascript на уровне страницы как модульные тесты, но вместо этого использовать систему, подобную Selenium, чтобы убедиться, что все работает как положено. Моя основная причина этого заключается в том, что на данный момент тесты Javascript на уровне страницы гарантированно не пройдут через JsTestDriver, потому что они пытаются получить доступ к элементам DOM, которые не могут существовать.
Итак, что должно быть модульное тестирование в Javascript?
источник
Ответы:
Проверьте все, что можете.
Чистая логика может быть легко проверена.
Если ваш код взаимодействует с DOM или сетью, это намного сложнее.
Если вы можете абстрагировать кусок кода для работы с произвольным элементом DOM вместо определенного, тогда вы можете протестировать его проще. (Сделать элемент для работы с параметром).
Код, использующий Ajax, можно протестировать, просто вызвав функцию обратного вызова с фиксированными данными. У меня были некоторые тесты, где я переписал
$.ajax
с моей собственной функцией. Просто убедитесь, что вы положили реальный обратно, когда вы закончите!Что вы обнаружите, так это то, что «javascript уровня страницы» действительно означает «тесно связанный код», и если вы отделите части кода, вы можете протестировать их независимо.
(Selenium не является модульным средством тестирования. Он отлично подходит для сценариев высокого уровня, но вы не можете протестировать его, и он не работает в изолированной среде.)
источник
$(document).ready(...)
....
. :-) Я чувствую, что вы должны иметь возможность свести это к одной именованной функции, которая также тестируется. Тогда ваш непроверенный код будет одной строкой. (Теперь это цель, а не само собой разумеющееся. На практике у меня всегда было более одной строки непроверенного кода.)Тестовые алгоритмы. Части, тесно связанные с GUI, в большей степени зависят от конкретного браузера, поэтому должны быть протестированы с использованием утилит, подобных селену.
Ваш код, конечно, должен содержать алгоритмы в виде отдельных частей кода, если этого не происходит, то модульное тестирование практически невозможно.
JQuery плагины, кстати, не так просто для тестирования юнитов.
источник
Раньше я работал с Java, и, как я вижу, модульное тестирование Java проще, чем модульное тестирование JavaScript, потому что Java более жесткая.
Я уверен, что разработка на основе тестирования - лучшая вещь, поэтому я также изучаю, как выполнить модульное тестирование JavaScript. В Java я смоделировал код, который установил соединение с базой данных, объектами доступа к данным, и сравнил его с кодом в JavaScript, который изменяет DOM, и кодом, который делает AJAX-вызовы на сервер.
Я имею в виду, что мне кажется, что следует проверить логику в явном виде. Например, вы не хотите делать AJAX-вызов при запуске модульных тестов, потому что (а) вам нужен сервер, и (б) он медленный, и одно из правил модульного тестирования состоит в том, что он должен быть очень быстро, чтобы разработчики не старались запускать их как каждую минуту.
Еще одно руководство для процесса непрерывной интеграции - отправить электронное письмо, в котором говорится, что он нашел модульный тест, который не прошел.
источник