Який найкращий тестовий фреймворк використовувати для Node.js? [зачинено]


130

Я ознайомився з досить довгим списком тестових рамок на веб-сторінці https://github.com/ry/node/wiki/modules#testing . Який досвід роботи з цими рамками?

Очевидно, що можливість роботи в браузері було б великим бонусом, але мене в основному цікавить Node.js. Щось із сильно асинхронним нахилом було б чудово.

Відповіді:


70

Оновлення:

Мока - найкращий на мій погляд.


Який досвід роботи з цими рамками?

Я грав з Expresso, який є досить класним тестуванням, який також має тестове покриття. Він був створений Т. Дж. Головайчуком, який також є автором Express.js (шалено швидкого (і маленького) сервера для веб-розробок JavaScript, розробленого на Node.js та Connect). Нещодавно я побачив, що він також має класну бібліотеку під назвою Should.js, яку можна використовувати разом з Expresso для ще кращого тестування.

Очевидно, що можливість роботи в браузері було б великим бонусом

Я не вірю, що він може працювати в браузері, але я також не розумію, чому ви хочете запустити його всередині браузера?

але мене в основному цікавлять Node.js. Щось із сильно асинхронним нахилом було б чудово.

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

Аргумент, переданий кожному зворотному виклику, є передExit, який, як правило, використовується для ствердження, що викликані зворотні виклики.

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


ПОРАДА: Дотримуйтесь TJ Holowaychuk на GitHub , оскільки він створює дуже хороший код з відкритим кодом.


Дякую за відповідь, я спробував експресо, але виявив, що підтримка async не дуже інтуїтивно зрозуміла. (Для мене все одно)
doffm

3
Зараз я пробую обітниці ( vowsjs.org ), які мені було легше зрозуміти.
doffm

vowjs також виглядав як хороший тестовий фреймворк. Мені подобається функція тестового покриття expresso. Плюс я цікаво, що ти не зрозумів?
Альфред

4
Ви кажете, що зараз віддаєте перевагу Мочу, але чому?
Джонатан Аркелл

Просто спробуйте. У Мочі є все :). Навіть підтримка браузера, покриття коду. Ви називаєте це, мокко це має!
Альфред

40

Я використовую VowsJS який простий у використанні Async BDD Framework (Behavior Driven Development) і роботу.

З того, що я бачу останнім часом, це те, що багато хто вирішив протестувати свої модулі NPM, тому я вважаю, що поки що це один із найкращих у використанні.

Деякі популярні рамки тестування, які можна використовувати з NodeJS, також:

Список тестових рамок JavaScript ви також можете переглянути тут

Трохи більше ліфтів, які можуть допомогти вам написати кращий код:

Є також Bamboo CI Server від Atlassian, який автоматизує побудову та тестування. Це пакет для Apache / Tomcat (який суксальний, оскільки він використовує Java і що робить його дуже важким) також не є безкоштовним, але він має ліцензію на стартер, яка коштує 10 доларів, тому я вважаю, що це доступно. Це найпопулярніший з усіх CI-серверів, яких я знайшов дотепер, і він підтримує всі тести, що підтримують xUnit, що означає, що ви можете запускати збірки / тести для будь-якої мови з Bamboo.

Ще один варіант для ІС з NodeJS - це Travis, який багато людей використовують для своїх проектів з відкритим кодом, як йдеться. Служба безперервної інтеграції, що приймає спільноту з відкритим кодом.

Також існує групова дискусія в Google із темою « Постійна інтеграція» для Node JS Projects .


6
Примітка для людей, які замислюються про використання обітниць: вона не оновлювалася з 2012 року
Командир коду

Вони внесли деякі зміни після . останній реліз: вересень, 2015
Андре Фігейредо

потрапив поганий шлюз на офіційному сайті Vows у 2020 році, може, мертвий?
Лінкольн

вау, приятелю, пройшло багато років з того часу, все, що я міг знайти про VowJS зараз, це це: istavros.github.io/vowjs, але, на жаль, я не можу запропонувати вам використовувати його в 2020 році. Він застарів, і я б сильно пропоную вам перевірити Mocha ( mochajs.org ), Жасмін ( jasmine.github.io ) та Jest ( jestjs.io ).
паносруд

14

На підставі вищезазначених коментарів запитувача я спробував обітниці , і це вирішило багато проблем, які виникли у мене з тестуванням на асинхронізацію. Його здатність поєднувати серійні та паралельні тестування є приголомшливою.

Переконайтеся, що ви уважно читаєте документ із вказівками, але як тільки ви отримаєте вигляд, він стає гнучким, потужним та дає хороші, чисті результати.

ОНОВЛЕННЯ: Я також закликаю людей перевірити якщо це потрібно . Це дозволяє дуже гнучкі, дуже читабельні твердження, і сумісні як з Expresso, так і з Vows, і, мабуть, з більшістю інших тестових рамок.

(Я публікую це як окрему відповідь на випадок, якщо люди не помітять коментарів до відповіді Альфреда.)

ОНОВЛЕННЯ 7.01.2015: Для чого це варто, я з тих пір перейшов з обітниць на Мочу та з Хо на Чай. Mocha має набагато кращу підтримку для асинхронних тестів з використанням обіцянок, і Chai дозволяє отримати кілька гнучких опцій утвердження, включаючи expectapi, для тих, хто не любить змінювати прототип об'єкта.


1
shouldЦвяхи не-перелічуваних власності імені shouldв Objectпрототип, тобто все з значень / об'єктів ви маєте справу з видом трохи іншим під час тестування і під час виробництва. Хоча це, мабуть, "просто працює" в більшості випадків, в принципі погана ідея змінювати вбудовані прототипи; робити це лише під час тестування почуває себе неправильно. Все це зроблено виключно, щоб вони мали гарний синтаксис.
потік

@flow оскільки v2 легко використовувати shouldбез розширення Object.prototype(просто зателефонуйте require('should').noConflict()та використовуйте must.js як альтернатива очікування.
den bardadym

6

Я почав використовувати Jasmine для мого тестування JavaScript, оскільки він невеликий і працює як у браузері, так і у вузлі. Також у нього дійсно надійний API звітування та відповідності, тому його легко інтегрувати з іншими інструментами в майбутньому. Створення глузливої ​​рамки для побудови також корисно, оскільки це часто одна з перших речей, яку я додав би, коли використовував qunit для TDD у браузері.


2

Якщо ви хочете справжньої рамки BDD, тоді, можливо, подумайте про Yadda . Він інтегрується з моккою, жасмином, nodeunit, 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

2

Я використовую nodeunit, і його здатність працювати з функціями асинхронізації досить просто.

Існує приємний посібник, який повинен підготувати вас до nodeunit у своєму блозі .

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


З огляду на це та після спроби декількох тестів функцій mongoose.js в expresso, перевага nodeunit не виконувати паралельно всі тести та дозволяти тести setUp та tearDown виглядає корисним.
спаржано
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.