Инструменты модульного тестирования JavaScript для TDD

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

19.11.2008 02:35:49
13 ОТВЕТОВ
РЕШЕНИЕ

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

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

Футуристический тестовый бегун со встроенной поддержкой 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. Они рекомендуют карму, браузер-стэк-бегун или интерна.

жасмин

жасмин

Это основанная на поведении среда (как указано в цитате ниже), которая может заинтересовать разработчиков, знакомых с 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. Никакие зависимости не работают с любой структурой модульного тестирования.

интерн

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

JEST

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

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

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

1505
9.01.2019 10:00:11
Жасмин может работать без головы, используя V8, но вы также можете использовать его в интерактивном режиме. Хотя DOM не является обязательным в отношении Jasmine, ваша кодовая база может получить доступ к DOM. С помощью дисциплины можно исключать, соблюдать условия или предоставлять имитации для частей кода, которые обращаются к DOM и выполняют тесты совершенно отдельно от HTML-приспособлений. Вы также можете получить поддержку командной строки и приспособления, используя дополнения.
jerseyboy 15.01.2012 06:19:45
@ rehevkor5: Selenium предназначен для интеграционного тестирования, а инструменты - для модульного тестирования. typemock.com/unit-tests-integration-tests
gregers 14.06.2012 11:58:07
Почти каждый тестирующий использует браузер. Wtf, никто не запускал модульные тесты только на стороне сервера ????
Rudolf Olah 19.01.2014 19:41:03
Разве не было бы лучше разделить / разделить каждую альтернативу в разных ответах? Это может сделать недействительными текущие голоса по этому вопросу, но я думаю, что это имело бы смысл.
cregox 31.03.2015 23:30:46
@Raisen Вы можете подключить ES 2015 к большинству из них с Babel , но AVA от Sindre Sorhus имеет его.
gregers 8.12.2015 08:13:40

Взгляните на среду модульного тестирования Dojo Object Harness (DOH), которая в значительной степени независима от среды для модульного тестирования JavaScript и не имеет каких-либо зависимостей Dojo. Это очень хорошее описание в модульном тестировании приложений Web 2.0 с использованием Dojo Objective Harness .

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

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

63
25.08.2011 18:30:41
Спасибо за предложение Dojo Object Harness, я бы никогда не нашел его. Я ценю другие предложения - но по одному шагу за раз.
Mark Levison 19.11.2008 15:06:10
Я фактически использовал это в предыдущем проекте, и нашел это неоценимым. Но опять же, я не могу сравнивать - не использовал другие структуры TDD.
Rakesh Pai 19.11.2008 17:20:21
Спасибо за сообщение о битых ссылках. Я обновил один из них и заменит ссылки на документы роботов, как только они появятся на новом веб-сайте.
Eugene Lazutkin 25.03.2011 18:01:17
Что мне не нравится в DOH, так это то, что номера строк не сообщаются, когда утверждения не выполняются. Комментирование их вручную и повторный запуск теста работает.
Aram Kocharyan 1.01.2014 08:08:22
Dojo заменяет DOH инфраструктурой тестирования TheIntern. TheIntern очень мощный и имеет существенные улучшения. sitepen.com/blog/2014/02/18/…
user64141 20.11.2014 22:15:04

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

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

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

Celerity : Watir API работает на JRuby при поддержке HtmlUnit.

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

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

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

6
19.11.2008 06:11:18

MochiKit имеет тестовую среду под названием SimpleTest, которая, кажется, завоевала популярность. Вот сообщение в блоге от оригинального автора .

2
22.07.2009 16:12:39
SimpleTest - еще один отличный вариант. Я рад, что я не делаю следственную работу здесь ;-)
Mark Levison 19.11.2008 15:05:40

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

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

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

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

3
28.11.2008 19:54:34

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

3
25.02.2009 10:18:13

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

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

6
26.02.2013 11:03:25
Имейте в
Peter V. Mørch 24.10.2014 07:04:57

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

26
1.06.2009 18:07:42

Chutzpah - JavaScript Runner

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

34
4.06.2015 20:22:00
Я только начал использовать Chutzpah для запуска тестов Jasmine в Visual Studio - он прекрасно интегрирован: щелкните правой кнопкой мыши по файлу тестов и выберите «запустить тесты js» или «запустить тесты JS в браузере». Я запускаю те же тесты с жасмином, используя JSTestDriver. Я предпочитаю Chutzpah, потому что я указываю, какие файлы зависят от загрузки в верхней части тестового файла. Для JSTestDriver мне нужен отдельный файл конфигурации.
GarethOwen 7.03.2012 16:00:32

Google-JS-тест:

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

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

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

10
5.01.2017 14:30:10
Похоже, что у Github практически нулевой интерес, к тому же для него нужна ОС на базе Unix, и я большой поклонник Windows, я не покидаю свой дом, не поцеловав мою Windows-машину до свидания.
vsync 7.11.2015 22:58:40

Сейчас мы используем Qunit с Павловым и JSTestDriver вместе. Этот подход хорошо работает для нас.

QUnit

Павлов , источник

jsTestDriver , источник

8
7.03.2014 16:59:53
Не могли бы вы объяснить, какова роль каждого из них во всем процессе тестирования и как они связаны друг с другом?
vsync 7.11.2015 23:01:23
Извините, это было давно и много контрактных заданий назад, чтобы вспомнить подробности об этом.
Tom Stickel 8.11.2015 07:15:05

Мы добавили интеграцию JUnit в наш генератор Java-кода 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;
  }
}
3
12.11.2013 17:20:52

BusterJS

Существует также BusterJS от Кристиана Йохансена, автора тестовой разработки Javascript Development и фреймворка Sinon. С сайта:

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

14
8.11.2015 13:32:10