Інструменти тестування блоку JavaScript для TDD


716

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

Відповіді:


1506

Карма або транспортир

Karma - тестовий запуск JavaScript, створений за допомогою Node.js і призначений для тестування одиниць.

Protractor призначений для тестування в кінці та використовує веб-драйвер Selenium для тестування драйвів.

Обидва зроблені командою Angular. Ви можете використовувати будь-яку бібліотеку тверджень, яку ви хочете, з будь-яким.

Екранна трансляція: Карма Початок роботи

пов'язані :

плюси :

  • Використовує node.js, настільки сумісний з Win / OS X / Linux
  • Запустіть тести з браузера або безголового з PhantomJS
  • Запуск декількох клієнтів одночасно
  • Можливість запуску, захоплення та автоматичного вимкнення браузерів
  • Можливість запуску сервера / клієнтів на комп'ютері розробки або окремо
  • Запустити тести з командного рядка (можна інтегрувати в ant / maven)
  • Пишіть тести xUnit або BDD
  • Підтримується кілька тестових рамок JavaScript
  • Автоматичне виконання тестів на збереження
  • Проксі вимагає крос-домену
  • Можлива налаштування:
    • Розгорніть його, щоб обернути інші тестові рамки (вбудовані Жасмін, Мока, QUnit)
    • Ваші власні твердження / спростування
    • Репортери
    • Браузерні запуски
  • Плагін для WebStorm
  • Підтримується IDE Netbeans

Мінуси :

mocha.js

Я абсолютно не кваліфікований, щоб коментувати особливості, сильні сторони та слабкі сторони mocha.js, але це мені просто рекомендував той, кому я довіряю спільноту JS.

Перелік функцій, про які повідомляє його веб-сайт:

  • підтримка браузера
  • проста підтримка асинхронізації, включаючи обіцянки
  • звітність про тестове покриття
  • підтримка струнної різниці
  • javascript # API для запуску тестів
  • належний статус виходу для підтримки CI тощо
  • автоматично виявляє та вимикає забарвлення для non-ttys
  • відображає винятки, що не знайдено у правильному тестовому випадку
  • підтримка часу асинхронного тестування
  • тайм-аути, визначені для тесту
  • підтримка службового сповіщення
  • повідомляє тривалість тесту
  • висвітлює повільні тести
  • підтримка спостерігача файлів
  • глобальне виявлення змінних витоків
  • необов'язково виконуйте тести, які відповідають регулярному вираженню
  • автоматичний вихід, щоб запобігти "висінню" з активною петлею
  • легко метагенерувати набори та тести
  • Підтримка файлу mocha.opts
  • титри набору, що можна натискати, для фільтрування виконання тесту
  • підтримка налагоджувача вузла
  • виявляє кілька здійснених дзвінків ()
  • використовувати будь-яку бібліотеку тверджень, яку ви хочете
  • розширювана звітність, в комплекті з 9+ репортерами
  • розширювані тестові DSL або "інтерфейси"
  • перед, після, перед кожним, після кожного гачка
  • підтримка довільного транспілятора (кава-сценарій тощо)
  • Комплект TextMate

жовто

жовто

Цього більше не існує, натомість переадресовує на послідовний.js

Yolpo - це інструмент для візуалізації виконання javascript. Запропоновано розробникам Javascript API написати свої випадки використання, щоб показати та розповісти про їх API. Такі випадки використання лежать в основі регресійних тестів.

AVA

Логотип AVA

Футуристичний тестовий бігун із вбудованою підтримкою для ES2015. Навіть незважаючи на те, що JavaScript є однопоточним, IO в Node.js може відбуватися паралельно через свою асинхронну природу. AVA скористається цим і одночасно запускає ваші тести, що особливо вигідно для важких тестів IO. Крім того, тестові файли виконуються паралельно як окремі процеси, що забезпечує ще кращу продуктивність та ізольоване середовище для кожного тестового файлу.

  • Мінімальний і швидкий
  • Простий синтаксис тесту
  • Тести виконуються одночасно
  • Примушує писати атомні тести
  • Немає неявних глобалів
  • Ізольоване середовище для кожного тестового файлу
  • Напишіть свої тести в ES2015
  • Обіцяють підтримку
  • Підтримка функції генератора
  • Підтримка функції асинхронізації
  • Помітна підтримка
  • Розширені твердження
  • Необов’язковий TAP o utput
  • Очистіть сліди стека

Buster.js

Тестовий запуск JavaScript, створений разом з Node.js. Дуже модульний і гнучкий. Він постачається зі власною бібліотекою тверджень, але ви можете додати свою, якщо хочете. Бібліотека тверджень відокремлена, тому ви можете також використовувати її з іншими тестовими бігунами. Замість того щоб використовувати assert(!...)або expect(...).not..., він використовує, refute(...)що є приємним твіст імхо.

Інструментарій тестування JavaScript у браузері. Це тестування браузера за допомогою автоматизації браузера (думаю JsTestDriver), статичне тестування HTML-сторінки в стилі QUnit, тестування в безголівкових браузерах (PhantomJS, jsdom, ...) та багато іншого. Погляньте на огляд !

Інструментарій тестування Node.js. Ви отримуєте ту саму бібліотеку тестових випадків, бібліотеку тверджень тощо. Це також чудово підходить для гібридного браузера та коду Node.js. Напишіть свій тестовий випадок з Buster.JS і запустіть його як у Node.js, так і в реальному браузері.

Екранна трансляція : Buster.js Початок роботи (2:45)

плюси :

  • Використовує node.js, настільки сумісний з Win / OS X / Linux
  • Запустіть тести з браузера або безголового з PhantomJS (незабаром)
  • Запуск декількох клієнтів одночасно
  • Підтримує тестування NodeJS
  • Не потрібно запускати сервер / клієнтів на комп'ютері розробки (не потрібно IE)
  • Запустити тести з командного рядка (можна інтегрувати в ant / maven)
  • Пишіть тести xUnit або BDD
  • Підтримується кілька тестових рамок JavaScript
  • Відкладіть тести замість того, щоб коментувати їх
  • SinonJS вбудований
  • Автоматичне виконання тестів на збереження
  • Проксі вимагає крос-домену
  • Можлива налаштування:
    • Розгорніть його, щоб обернути інші тестові рамки (вбудований JsTestDriver)
    • Ваші власні твердження / спростування
    • Репортери (xUnit XML, традиційні точки, специфікація, торкніться, TeamCity та більше вбудованих)
    • Налаштуйте / замініть HTML, який використовується для запуску тестів браузера
  • Інтеграція TextMate та Emacs

Мінуси :

  • Stil у бета-версії може бути помилковим
  • Немає плагіна для Eclipse / IntelliJ (поки що)
  • Не групує результати за ОС / браузера / версії, як TestSwarm *. Однак він видає ім'я та версію браузера в результатах тестування.
  • Немає історії попередніх результатів тестів, таких як TestSwarm *
  • Не працює повністю на Windows за станом на травень 2014 року

* TestSwarm - це також сервер безперервної інтеграції, тоді як для Buster.js вам потрібен окремий сервер CI. Однак він виводить звіти xUnit XML, тому інтегрувати його з Hudson , Bamboo або іншими серверами CI слід легко .

TestSwarm

https://github.com/jquery/testswarm

Офіційно TestSwarm вже не знаходиться в активному розвитку, як зазначено на їхній веб-сторінці GitHub. Вони рекомендують Karma, переглядача, що працює в браузері, або стажера.

Жасмін

Жасмін

Це структура, орієнтована на поведінку (як зазначено в цитуванні нижче), яка може зацікавити розробників, знайомих з Ruby або Ruby on Rails. Синтаксис заснований на RSpec , які використовуються для тестування в проектах Rails.

Характеристики жасмину можна запустити зі сторінки html (в режимі qUnit) або з тестового запуску (як Karma).

Jasmine - це орієнтована на поведінку структура розробки для тестування вашого коду JavaScript. Це не залежить від будь-яких інших фреймворків JavaScript. Для цього не потрібен DOM.

Якщо у вас є досвід роботи з цією рамкою тестування, будь ласка, надайте додаткову інформацію :)

Домашня сторінка проекту: http://jasmine.github.io/

КВІТ

QUnit зосереджується на тестуванні JavaScript у браузері, надаючи максимально зручну можливість для розробника. Розмиття з сайту:

QUnit - потужний, простий у користуванні тестовий набір модулів JavaScript. Він використовується проектами jQuery, інтерфейсом jQuery та jQuery Mobile і здатний тестувати будь-який загальний код JavaScript

QUnit ділиться історією з TestSwarm (вище):

QUnit спочатку був розроблений Джоном Ресігом як частина jQuery. У 2008 році він отримав власну домашню документацію, назву та API, що дозволило іншим використовувати його і для їх тестування. На той час це все ще залежало від jQuery. Перезапис 2009 року виправдав це, тепер QUnit працює повністю самостійно. Методи твердження QUnit відповідають специфікації тестування UnitJS Unit, на яку певною мірою впливав QUnit.

Домашня сторінка проекту: http://qunitjs.com/

Синон

Ще одним чудовим інструментом є sinon.js Крістіан Йохансен, автор тестової JavaScript-розробки . Найкраще описав сам:

Автономні тестові шпигуни, заглушки та макети для JavaScript. Жодна залежність не працює з будь-якою одиницею тестування рамки.

Стажер

Стажер Веб - сайт забезпечує пряме порівняння функцій для інших структур тестування в цьому списку. Він пропонує більше можливостей, ніж будь-яка інша система тестування на основі JavaScript.

JEST

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

Перегляньте одну з їхніх розмов: https://www.youtube.com/watch?v=cAKYQpTC7MA

Ще краще: Початок роботи


2
Жасмін може працювати без голови за допомогою V8, але ви також можете використовувати його інтерактивно. Хоча DOM не потрібен щодо Jasmine, ваша база даних може отримати доступ до DOM. За допомогою дисципліни можна усунути, захистити умови або надати макети для частин коду, які мають доступ до DOM і виконувати тести повністю, крім HTML-приладів. Ви також можете отримати підтримку командного рядка та світильники за допомогою додатків.
Джерсібой

2
@ rehevkor5: Селен призначений для тестування інтеграції, а інструменти - для тестування одиниць. typemock.com/unit-tests-integration-tests
gregers

26
Майже кожен тест-бігун покладається на браузер. Wtf, чи ніхто ніколи не запускає одиничні тести тільки на стороні сервера ????

2
Чи не було б краще розділити / розділити кожну альтернативу на різні відповіді? Це може визнати недійсними поточні голоси за цей, але я думаю, це мало б сенсу.
Крегокс

2
@Raisen Ви можете підключити ES 2015 до більшості з Babel , але AVA від Sindre Sorhus має вбудований.
gregers

64

Погляньте на тестову рамку пристрою Dojo Object Harness (DOH), яка в значній мірі є незалежною за допомогою джгута для тестування блоку JavaScript і не має ніяких залежностей Dojo. Це дуже хороший опис цього приладу для тестування додатків Web 2.0 з використанням Dojo Objective Harness .

Якщо ви хочете автоматизувати тестування користувальницького інтерфейсу (біль у багатьох розробників) - перевірте doh.robot (тимчасове зменшення. Оновлення: інше посилання http://dojotoolkit.org/reference-guide/util/dohrobot.html ) і dijit .robotx (тимчасовий вниз) . Останній призначений для приймального тестування. Оновлення:

Статті, що посилаються, пояснюють, як ними користуватися, як емулювати користувача, який взаємодіє з вашим інтерфейсом користувача за допомогою миші та / або клавіатури, і як записати тестовий сеанс, щоб потім ви могли «відтворити» його пізніше автоматично.


Дякую за пропозицію Dojo Object Harness, я ніколи не знайшов би її. Я ціную інші пропозиції - але один крок за часом.
Марк Левісон

Я фактично використовував це в попередньому проекті і вважав це безцінним. Але знову ж таки, я не можу порівняти - не використовував жодної іншої рамки TDD.
Ракеш Пай

Дякуємо за повідомлення про мертві посилання. Я оновив один з них і замінюю посилання на документи роботів, як тільки я з'являться на новому веб-сайті.
Євген Лазуткін

Одне, що мені не подобається в DOH, - це те, що номери рядків не повідомляються, коли твердження провалюються. Коментуючи їх вручну та повторно виконуючи тестові роботи.
Арам Кочарян

Dojo замінює DOH на основі тестування TheIntern. Інтернер дуже потужний і суттєво вдосконалюється. sitepen.com/blog/2014/02/18/…
користувач64141

34

Chutzpah - Тест JavaScript Runner

Я створив проект з відкритим кодом під назвою Chutzpah, який є тестовим запуском для тестів JavaScript. Chutzpah дозволяє запускати тести блоку JavaScript з командного рядка та зсередини Visual Studio. Він також підтримує запуск на сервері безперервної інтеграції TeamCity.


7
Щойно я почав використовувати Chutzpah для запуску тестів Жасмину у візуальній студії - це чудово інтегровано: клацніть правою кнопкою миші на тестовому файлі та вибрав «запустити тести js» або «запустити тести JS у браузері». Я запускаю ті ж тести на жасмин за допомогою JSTestDriver. Я віддаю перевагу Chutzpah, оскільки я вказую, від яких файлів я залежаю від завантаження у верхній частині тестового файлу. Для JSTestDriver мені потрібен окремий конфігураційний файл.
ГаретОвен


14

BusterJS

Також є BusterJS від Крістіана Йохансена, автора тестового керування Javascript і рамки Sinon. З сайту:

Buster.JS - це нова рамка тестування JavaScript. Це тестування браузера шляхом автоматизації тестових запусків у фактичних браузерах (думаю JsTestDriver), а також тестування Node.js.


10

google-js-test:

Рамка тестування JavaScript, випущена Google: https://github.com/google/gjstest

  • Надзвичайно швидкий час запуску та виконання тесту без необхідності запуску браузера.
  • Чистий, читабельний вихід у разі проходження та невдалого тестування.
  • Браузерні тест бігун , який просто може оновлюватися кожен раз , коли JS змінюється.
  • Стиль та семантика, що нагадують тест Google для C ++.
  • Вбудований глузливий фреймворк, який вимагає мінімального кодового коду (наприклад, немає $tearDownабо $verifyAll) зі стилем та семантикою на основі Mocking Framework Google C ++ .

Наразі бінарних файлів для Windows немає


1
Схоже, це майже нульовий інтерес до Github, також для цього потрібні ОС UNIX-баз, і я величезний фанат вікон, я не виходжу з дому, не поцілувавши прощання з Windows-машиною.
vsync

8

Зараз ми всі разом використовуємо Qunit з Павловим та JSTestDriver. Такий підхід для нас добре працює.

КВІТ

Павлов , джерело

jsTestDriver , джерело


Чи хотіли б ви пояснити, яка роль у кожному з них у всьому процесі тестування та як вони зв’язуються між собою?
vsync

Вибачте, що давно, і багато контрактних робіт тому, щоб згадати деталі щодо цього.
Том Стікель

6

У вас "працює на фактичному веб-переглядачі" як професіонал, але, на мій досвід, це підступ, тому що це повільно. Але те, що робить його цінним, - це відсутність достатньої емуляції JS від альтернатив, які не є браузером. Можливо, якщо ваш JS досить складний, то достатньо лише тесту в браузері, але є ще кілька варіантів, які слід врахувати:

HtmlUnit : "Він має досить гарну підтримку JavaScript (яка постійно вдосконалюється) і здатний працювати навіть із досить складними бібліотеками AJAX, імітуючи Firefox або Internet Explorer залежно від конфігурації, яку ви хочете використовувати." Якщо його емуляція досить хороша для використання, то це буде набагато швидше, ніж керування браузером.

Але, можливо, HtmlUnit має достатньо гарну підтримку JS, але вам не подобається Java? Тоді можливо:

Швидкість : Watir API працює на JRuby підтримки HtmlUnit.

або аналогічно

Schnell : ще одна оболонка JRuby від HtmlUnit.

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


6

YUI також має рамки тестування . Це відео від Yahoo! Театр є приємним вступом, хоча є багато основ щодо TDD на передній частині.

Цей фреймворк є загальним і може працювати з будь-якою бібліотекою JavaScript або JS.



3

Можливо, вас також зацікавить блок тестування підрозділів, який є частиною qooxdoo , рамкою RIA з відкритим кодом, подібною до Dojo, ExtJS тощо, але з цілком розгалуженою ланцюжком інструментів.

Спробуйте онлайн-версію testrunner . Підказка: натисніть на сіру стрілку вгорі зліва (слід зробити більш очевидною). Це кнопка "відтворити", яка запускає вибрані тести.

Щоб дізнатися більше про класи JS, за допомогою яких можна визначити тести одиниць, див. Онлайн- переглядач API .

Для автоматизованого тестування користувальницького інтерфейсу (на основі Selenium RC) ознайомтеся з проектом Simulator .



3

Ми додали інтеграцію JUnit до нашого Java-генератора коду JavaScript ST-JS ( http://st-js.org ). Рамка генерує відповідний Javascript як для тестованого коду, так і для одиничного тестування та відправляє код у різні браузери.

Немає необхідності в окремому сервері, оскільки тестовий бігун блоку відкриває необхідний http-порт (і закриває його після завершення тестів). Рамка маніпулює стек-кодом Java так, щоб невдалі твердження правильно відображалися плагіном JUnit Eclipse. Ось простий приклад з jQuery та Mockjax:

@RunWith(STJSTestDriverRunner.class)
@HTMLFixture("<div id='fortune'></div>")

@Scripts({ "classpath://jquery.js",
       "classpath://jquery.mockjax.js", "classpath://json2.js" })
public class MockjaxExampleTest {
  @Test
  public void myTest() {
    $.ajaxSetup($map("async", false));
    $.mockjax(new MockjaxOptions() {
      {
        url = "/restful/fortune";
        responseText = new Fortune() {
          {
            status = "success";
            fortune = "Are you a turtle?";
          }
        };
      }
    });

    $.getJSON("/restful/fortune", null, new Callback3<Fortune, String, JQueryXHR>() {
      @Override
      public void $invoke(Fortune response, String p2, JQueryXHR p3) {
        if (response.status.equals("success")) {
          $("#fortune").html("Your fortune is: " + response.fortune);
        } else {
          $("#fortune").html("Things do not look good, no fortune was told");
        }

      }
    });
    assertEquals("Your fortune is: Are you a turtle?", $("#fortune").html());
  }

  private static class Fortune {
    public String status;
    public String fortune;
  }
}

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.