Какую среду тестирования лучше всего использовать с Node.js? [закрыто]

130

Я просмотрел довольно длинный список фреймворков для тестирования на https://github.com/ry/node/wiki/modules#testing . Какой у вас опыт работы с этими фреймворками?

Очевидно, что возможность работать в браузере была бы большим плюсом, но меня больше всего интересует Node.js. Что-нибудь с сильно асинхронным уклоном было бы здорово.

doffm
источник

Ответы:

70

Обновить:

Мокко лучший на мой взгляд.


Какой у вас опыт работы с этими фреймворками?

Я играл с expresso, который представляет собой довольно классную платформу для тестирования, которая также имеет покрытие для тестирования. Он был создан TJ Holowaychuk, который также является создателем Express.js (безумно быстрого (и небольшого) серверного фреймворка для веб-разработки JavaScript, построенного на Node.js и Connect). Недавно я увидел, что у него также есть классная библиотека под названием should.js, которую можно использовать вместе с Expresso для еще большего удобства тестирования.

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

Я не верю, что он может работать в браузере, но я также не понимаю, почему вы хотите запускать его в браузере?

но меня в основном интересует Node.js. Что-нибудь с сильно асинхронным уклоном было бы здорово.

Цитата из экспресса:

Каждому обратному вызову передается аргумент beforeExit, который обычно используется для подтверждения того, что обратные вызовы были вызваны.

Вы можете использовать beforeExit для тестирования асинхронных функций.


СОВЕТ: следите за TJ Holowaychuk на GitHub , потому что он создает очень хороший открытый исходный код.

Альфред
источник
Спасибо за ответ, я попробовал expresso, но обнаружил, что поддержка async не очень интуитивна. (Во всяком случае для меня)
doffm
3
В настоящее время я пробую клятвы ( vowsjs.org ), которые мне было легче понять.
doffm
vowjs также выглядел как хороший фреймворк для тестирования. Мне нравится функция покрытия тестов Expresso. Плюс мне интересно, что вы не поняли?
Альфред
4
Вы говорите, что сейчас предпочитаете мокко, но почему?
Джонатан Аркелл
Просто попробуйте. В мокко есть все :). Даже поддержка браузера, покрытие кода. Вы называете это, мокко есть!
Альфред
40

Я использую VowsJS, который прост в использовании асинхронной структуры BDD (разработка, управляемая поведением), и выполняю свою работу.

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

Некоторые популярные среды тестирования, которые можно использовать с NodeJS, также:

Вы также можете увидеть список тестовых фреймворков JavaScript здесь

Еще несколько библиотек, которые могут помочь вам писать лучший код:

Также существует Bamboo CI Server от Atlassian, который автоматизирует сборки и тесты. Это пакет для Apache / Tomcat (который sux, потому что он использует Java, что делает его очень тяжелым) также платный, но у него есть стартовая лицензия, которая стоит 10 долларов, поэтому я считаю, что это доступно. Это наиболее функциональный из всех серверов CI, которые я нашел до сих пор, и он поддерживает все модульные тесты, поддерживающие xUnit, что означает, что вы можете запускать сборки / тесты для любого языка с Bamboo.

Другой вариант для CI с NodeJS - это Travis, который многие люди используют для своих проектов с открытым исходным кодом, поскольку он говорит о размещенной службе непрерывной интеграции для сообщества с открытым исходным кодом.

Также есть обсуждение в группе Google с темой « Непрерывная интеграция для проектов Node JS» .

panosru
источник
6
Примечание для тех, кто думает об использовании Vows: он не обновлялся с 2012 года
Code Commander
Потом они внесли некоторые изменения . последний релиз: сентябрь 2015 г.
Андре Фигейредо
получил плохой шлюз на официальном сайте Vows в 2020 году, может быть, мертв?
Линкольн
вау, приятель, с тех пор прошло МНОГО лет, все, что я смог найти о VowJS сейчас, это: istavros.github.io/vowjs, но, к сожалению, я не могу предложить вам использовать его в 2020 году. Он устарел, и я бы настоятельно рекомендовал Предлагаем вам вместо этого проверить Mocha ( mochajs.org ), Jasmin ( jasmine.github.io ) и Jest ( jestjs.io ).
паносру
14

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

Убедитесь, что вы внимательно прочитали руководство, но как только вы освоите его, он станет гибким, мощным и даст хорошие, чистые результаты.

UPDATE: Я хотел бы также поощрять людей , чтобы проверить следует за их утверждает. Он позволяет создавать очень гибкие, легко читаемые утверждения и совместим как с Expresso, так и с Vows, а также, вероятно, с большинством других тестовых сред.

(Я отправляю это как отдельный ответ на тот случай, если люди не заметят комментариев к ответу Альфреда.)

ОБНОВЛЕНИЕ 1/7/2015: Как бы то ни было, с тех пор я переключился с Vows на Mocha и с Should на Chai. Mocha теперь имеет гораздо лучшую поддержку асинхронных тестов с использованием обещаний, а Chai позволяет использовать несколько гибких параметров утверждения, включая expectapi, для тех, кто не любит изменять прототип объекта.

Крис Джейнс
источник
1
shouldГвозди не-перечислимы собственности имени shouldв Objectпрототип, то есть все из значений / объектов вы имеете дело с видом немного иным во время тестирования и во время производства. Хотя в большинстве случаев это, вероятно, «просто работает», в принципе, изменять встроенные прототипы - плохая идея; делать это только во время тестирования - неправильно. Все это сделано исключительно для того, чтобы у них был хороший синтаксис.
flow
@flow, поскольку v2, его легко использовать shouldбез расширения Object.prototype(просто вызовите require('should').noConflict()и используйте should.js в качестве ожидаемой альтернативы.
den bardadym
6

Я начал использовать Jasmine для тестирования JavaScript именно потому, что он небольшой и работает как в браузере, так и в узле. Он также имеет действительно надежный API отчетов и сопоставлений, поэтому в будущем его легко интегрировать с другими инструментами. Наличие встроенного фреймворка имитации также полезно, поскольку часто это одна из первых вещей, которые я добавляю, когда использую qunit для TDD в браузере.

Марк Б
источник
2

Если вам нужен настоящий фреймворк BDD, подумайте о Yadda . Он интегрируется с mocha, jasmine, nodeunit, qunit, zombie и 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
user2434418
источник
2

Я использую nodeunit, и его способность работать с асинхронными функциями достаточно проста.

В его блоге есть хорошее пошаговое руководство, которое должно подготовить вас к работе с nodeunit .

[ Примечание: API изменился после публикации в блоге - setUp(callback)и tearDown(callback)оба принимают обратный вызов в качестве аргумента, который вам нужно вызвать, когда ваша установка / разборка будет завершена. ]

Vanwaril
источник
Глядя на это и после попытки нескольких тестов функций mongoose.js в expresso, предпочтение nodeunit не запускать все тесты параллельно и разрешить тесты setUp и tearDown выглядит полезным.
asparagino