Какая лучшая структура тестирования для использования с 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 здесь

Несколько других библиотек, которые могли бы помочь вам лучше писать код, таковы:

  • ReadyJS отслеживает ваши js файлы и тестирует их с помощью JSHint
  • Concrete small непрерывная интеграция сервер
  • Jezebel непрерывное тестирование для Jasmine
  • Nosey не совсем там, но есть хорошая дорожная карта, поэтому я слежу за ней.

Существует также 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