JavaScript unit test инструменты для TDD

Я просмотрел и рассмотрел множество тестовых модулей и тестовых инструментов JavaScript, но не смог найти подходящую возможность оставаться полностью совместимой с TDD. Итак, есть ли инструмент JavaScript unit test, полностью совместимый с TDD?

Ответы

Ответ 1

Карма или Транспортир

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

Транспортир предназначен для сквозного тестирования и использует Selenium Web Driver для проведения тестов.

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

Скринкаст: Карма Начало работы

связанные:

плюсы:

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

Минусы:

mocha.js

Я совершенно не квалифицирован, чтобы комментировать особенности, сильные и слабые стороны mocha.js, но он был только рекомендован мне кем-то, кому я доверяю в сообществе JS.

Список функций, как сообщается на его сайте:

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

yolpo

yolpo

Это больше не существует, вместо этого перенаправляет на sequential.js

Yolpo - это инструмент для визуализации выполнения javascript. Разработчикам Javascript API предлагается написать свои сценарии использования, чтобы показать и рассказать об их API. Такие варианты использования составляют основу регрессионных тестов.

AVA

AVA logo

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

  • Минимальный и быстрый
  • Простой тестовый синтаксис
  • Запускает тесты одновременно
  • Обеспечивает написание атомных тестов
  • Нет скрытых глобалов
  • Изолированная среда для каждого тестового файла
  • Напишите свои тесты в ES2015
  • Обещание поддержки
  • Поддержка функции генератора
  • Поддержка асинхронных функций
  • Наблюдаемая поддержка
  • Расширенные утверждения
  • Дополнительный TAP o utput
  • Чистые следы стека

Buster.js

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

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

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

Screencast: 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

Минусы:

  • Стил в бета-версии, поэтому может быть глючит
  • Нет плагин для Eclipse/IntelliJ (пока)
  • Не группирует результаты по os/browser/version, как TestSwarm *. Однако он выводит имя и версию браузера в результатах теста.
  • Нет истории предыдущих результатов испытаний, таких как TestSwarm *
  • Не полностью работает на окнах с мая 2014

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

TestSwarm

https://github.com/jquery/testswarm

TestSwarm официально больше не находится в активной разработке, как указано на их веб-странице GitHub. Они рекомендуют карму, браузер-стэк-бегун или интерна.

жасмин

Jasmine

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

Спецификации Jasmine могут быть запущены с html-страницы (в стиле qUnit) или от тестового бегуна (как Karma).

Jasmine - это основанная на поведении среда разработки для тестирования вашего кода JavaScript. Это не зависит от других JavaScript-фреймворков. Это не требует DOM.

Если у вас есть опыт работы с этой платформой тестирования, пожалуйста, предоставьте больше информации :)

Проект дома: http://jasmine.github.io/

QUnit

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

QUnit - это мощный и простой в использовании набор юнит-тестов JavaScript. Он используется в проектах jQuery, jQuery UI и jQuery Mobile и способен тестировать любой универсальный код JavaScript

QUnit делится историей с TestSwarm (выше):

Изначально QUnit был разработан Джоном Резигом как часть jQuery. В 2008 году он получил собственную документацию по домам, именам и API, что позволяет другим использовать его и для модульного тестирования. В то время это все еще зависело от jQuery. Переписывание в 2009 исправило это, теперь QUnit работает полностью автономно. Методы подтверждения QUnit следуют спецификации CommonJS Unit Testing, на которую в некоторой степени повлиял QUnit.

Проект дома: http://qunitjs.com/

Sinon

Другой замечательный инструмент - sinon.js Кристиана Йохансена, автора тестовой разработки JavaScript. Лучше всего описал сам:

Автономные тестовые шпионы, заглушки и макеты для JavaScript. Никакие зависимости не работают с любой структурой модульного тестирования.

интерн

Веб-сайт Intern предоставляет прямое сравнение функций с другими платформами тестирования в этом списке. Он предлагает больше возможностей, чем любая другая система тестирования на основе JavaScript.

JEST

Новый, но очень мощный фреймворк для тестирования. Это позволяет проводить тестирование на основе снимков, что увеличивает скорость тестирования и создает новую динамику в плане тестирования.

Посмотрите одно из их выступлений: https://www.youtube.com/watch?v=cAKYQpTC7MA.

Еще лучше: начало работы

Ответ 2

Посмотрите Dojo инфраструктура привязки объектов (DOH) unit test, которая в значительной степени является независимой от фреймов для модульного тестирования JavaScript и не имеет никаких зависимостей Dojo. Существует очень хорошее описание его в Модульное тестирование приложений Web 2.0 с помощью Dojo Целевая жгут.

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

В связанных статьях объясняется, как их использовать, как эмулировать пользователя, взаимодействующего с вашим пользовательским интерфейсом, с помощью мыши и/или клавиатуры, и как записывать сеанс тестирования, чтобы вы могли автоматически "воспроизвести" его позже.

Ответ 3

Chutzpah - тестовый бег JavaScript

Я создал проект с открытым исходным кодом под названием Chutzpah, который является тестовым бегуном для модульных тестов JavaScript. Chutzpah позволяет запускать тесты модуля JavaScript из командной строки и изнутри Visual Studio. Он также поддерживает работу на сервере непрерывной интеграции TeamCity.

Ответ 4

Раздел JavaScript в записи Википедии, Список модулей тестирования устройств, содержит список доступных вариантов. Он указывает, работают ли они на стороне клиента, на стороне сервера или на обоих.

Ответ 5

BusterJS

Существует также BusterJS от Christian Johansen, автора тестовой разработки Javascript Development и Sinon. На сайте:

Buster.JS - это новая среда тестирования JavaScript. Это проверка браузера, автоматизируя тестовые прогоны в реальных браузерах (думаю, JsTestDriver), а также тестирование Node.js.

Ответ 6

Google-JS-тест:

Структура тестирования JavaScript, выпущенная Google: https://github.com/google/gjstest

  • Чрезвычайно быстрый запуск и время запуска теста, без необходимости запуска браузер.
  • Чистый, читаемый вывод в случае как прохождения, так и неудачных тестов.
  • A браузерный тестовый бегун, который можно просто обновить при изменении JS.
  • Стиль и семантика, которые напоминают Google Test для С++.
  • Встроенная mocking framework, которая требует минимального кода шаблона (например, нет $tearDown или $verifyAll) со стилем и семантикой на основе Google С++ Mocking Framework.

В настоящее время нет двоичных файлов для Windows

Ответ 8

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

HtmlUnit: "У него довольно хорошая поддержка JavaScript (которая постоянно совершенствуется) и может работать даже с довольно сложными библиотеками AJAX, имитируя Firefox или Internet Explorer в зависимости от конфигурации, которую вы хотите использовать". Если его эмуляция достаточно хороша для вашего использования, она будет намного быстрее, чем управлять браузером.

Но, может быть, HtmlUnit имеет достаточно хорошую поддержку JS, но вам не нравится Java? Тогда возможно:

Celerity: API Watir, запущенный на JRuby, поддерживаемый HtmlUnit.

или аналогично

Schnell: еще одна оболочка JRuby для HtmlUnit.

Конечно, если HtmlUnit недостаточно хорош, и вам нужно управлять браузером, вы можете рассмотреть Watir для управления вашим JS.

Ответ 9

YUI имеет структуру тестирования. Это видео из Yahoo! Театр - отличное введение, хотя в TDD есть много основ.

Эта структура является общей и может быть запущена в отношении любой библиотеки JavaScript или JS.

Ответ 10

Вы также можете быть заинтересованы в модульной структуре тестирования, которая является частью qooxdoo, рамки RIA с открытым исходным кодом, похожие на Dojo, ExtJS и т.д., Но с довольно сложной цепочкой инструментов.

Попробуйте онлайн-версию testrunner. Подсказка: нажмите серую стрелку в левом верхнем углу (должно быть сделано более очевидно). Это кнопка "play", которая запускает выбранные тесты.

Чтобы узнать больше о классах JS, которые позволяют вам определять свои модульные тесты, см. онлайн-просмотр API-интерфейс.

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

Ответ 11

Вы должны посмотреть env.js. См. мой блог для примера, как писать модульные тесты с помощью env.js.

Ответ 12

Мы добавили интеграцию JUnit к нашей Java в Javascript-генератор кода ST-JS (http://st-js.org). Структура генерирует соответствующий Javascript для тестируемого кода и модульных тестов и отправляет код в разные браузеры.

Нет необходимости в отдельном сервере, так как бегун unit test открывает необходимый 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;
  }
}