Какая лучшая структура тестирования для использования с Node.js?
Я просмотрел довольно длинный список тестовых фреймворков https://github.com/ry/node/wiki/modules#testing. Каков опыт работы с этими структурами?
Очевидно, что возможность запуска в браузере будет большим бонусом, но меня в основном интересует Node.js. Что-то с сильно асинхронным наклоном было бы здорово.
Ответы
Ответ 1
Обновить:
Мокко лучшее на мой взгляд.
Каков опыт работы с этими фреймворками?
Я играл с expresso, который является довольно крутой средой тестирования, которая также имеет тестовое покрытие. Он был создан TJ Holowaychuk, который также является создателем Express.js (безумно быстрой (и небольшой) серверной инфраструктуры веб-разработки JavaScript, основанной на Node.js и Connect). Недавно я увидел, что у него также есть классная библиотека should.js, которую можно использовать вместе с Expresso для еще большего удобства тестирования.
Очевидно, что возможность запуска в браузере будет большим бонусом
Я не верю, что он может работать в браузере, но я также не понимаю, почему вы хотите запустить его в браузере?
но я в основном заинтересован в Node.js. Что-то с сильно асинхронным уклоном было бы здорово.
Цитата из экспресса:
Аргумент, передаваемый каждому обратному вызову, - beforeExit, который обычно используется, чтобы утверждать, что обратные вызовы были вызваны.
Вы можете использовать beforeExit для тестирования асинхронных функций.
СОВЕТ: Следуйте за TJ Holowaychuk на GitHub, потому что он создает очень хороший открытый код.
Ответ 2
Я использую VowsJS, который прост в использовании async BDD framework (Behavior Driven Development) и выполняет задание.
Из того, что я вижу в последнее время, это то, что многие выбрали для тестирования своих модулей NPM, поэтому я считаю, что до сих пор он был лучшим в использовании.
Некоторые популярные рамки тестирования, которые могут быть использованы с NodeJS, также таковы:
Вы также можете просмотреть список фреймворков JavaScript здесь
Несколько других библиотек, которые могли бы помочь вам лучше писать код, таковы:
Существует также Bamboo CI Server Atlassian он автоматизирует сборку и тестирование. Это пакет для Apache/Tomcat (который sux, поскольку он использует Java и делает его очень тяжелым) также не является бесплатным, но имеет стартовая лицензия, которая стоит 10 долларов США, поэтому я считаю, что она доступна по цене. Это самый признанный из всех серверов CI, которые я нашел до сих пор, и он поддерживает все модульные тесты, поддерживающие xUnit, что означает, что вы можете запускать сборки/тесты для любого языка с Bamboo.
Другим вариантом для CI с NodeJS является Travis, который многие люди используют для своих проектов с открытым исходным кодом, так как он говорит, что постоянная интеграция с хостингом службы для сообщества с открытым исходным кодом.
Существует также обсуждение группы google с Непрерывная интеграция для Node проектов JS.
Ответ 3
Основываясь на комментариях выше, я опробовал vows, и он решил множество проблем, которые у меня были с моей асинхронной тестирование. Его способность сочетать серийное и параллельное тестирование является удивительной.
Удостоверьтесь, что вы внимательно прочитали инструкцию по руководству, но как только вы ее повесили, она гибкая, мощная и дает приятные, чистые результаты.
UPDATE: Я бы также посоветовал людям проверить should для своих утверждений. Он позволяет использовать очень гибкие, очень читаемые утверждения и совместим как с Expresso, так и с обезьянами, а также с большинством других тестовых фреймворков.
(Я отправляю это как отдельный ответ, если люди не замечают комментарии к ответам Альфреда.)
ОБНОВЛЕНИЕ 1/7/2015: за что это стоит, я с тех пор перешел от клятв к мокко, а от "до чаю". Mocha теперь имеет гораздо лучшую поддержку асинхронных тестов с использованием promises, а Chai позволяет использовать несколько гибких параметров assert, включая expect
api, для тех, кто не любит изменять прототип объекта.
Ответ 4
Я начал использовать Jasmine для моего тестирования JavaScript, потому что он маленький и работает как в браузере, так и в node. Он также получил действительно надежный API отчетов и сопоставления, поэтому он легко интегрируется с другими инструментами в будущем. Наличие встроенной фальшивой структуры также полезно, так как часто это одна из первых вещей, которые я бы добавил, когда я использовал qunit для TDD в браузере.
Ответ 5
Я использовал nodeunit, и его способность работать с асинхронными функциями достаточно прост.
Там хорошее пошаговое руководство, которое должно подготовить вас к работе с nodeunit в своем блоге.
[ Примечание. API изменился с тех пор, как blogpost - setUp(callback)
и tearDown(callback)
оба принимают обратный вызов в качестве аргумента, который необходимо вызвать, когда ваша установка/отрыв завершен. ]
Ответ 6
Если вы хотите создать истинную структуру BDD, то, возможно, рассмотрите Yadda. Он объединяется с моккой, жасмином, узловым узлом, qunit, зомби и casperjs для поддержки файлов функций, например.
Scenario: provides the version of all services
given service x is running
and service y is running
when I request the service versions
then service x should be version 0.0.1
and service y should be version 0.0.2