Какие фреймворки для модульного тестирования и мокинга JavaScript вы использовали?[закрыто]

StackOverflow https://stackoverflow.com/questions/209418

Вопрос

Мой основной фреймворк JavaScript jQuery поэтому я бы хотел, чтобы мои модульные тесты и макеты были совместимы с этим.Я бы предпочел не вводить еще один фреймворк JavaScript.

в настоящее время я использую QUnit для модульного тестирования и Джек за издевательство, но я новичок в модульном тестировании JavaScript.

Кто-нибудь еще может предложить лучший инструмент?Что сработало для вас?

Это было полезно?

Решение

QUnit
jQUnit
Написание JS-тестов с помощью QUnit и jQUnit

QUnit — это среда модульного тестирования для платформы jQuery JavaScript.Сама среда тестирования использует библиотеку jQuery, но тесты могут быть написаны для любого JavaScript и не требуют использования кода jQuery.JQUnit — это модифицированная версия QUnit, в которую добавлены функции настройки, удаления и утверждения, которые более типичны для платформы xUnit, и инкапсулирует все в одну глобальную переменную.

Визуальный интерфейс страницы testrunner удобен и позволяет вам детализировать и увидеть каждое утверждение в каждом методе тестирования.Написание тестов довольно просто, и вы можете запустить тестовый код прямо на странице testRunner [8].Это позволяет легко и наглядно проводить тестирование DOM.

Единица измерения:MIT или GPL (выберите) jQUnit:Лицензия MIT

Плюсы
- Асинхронная поддержка
- Подходит для тестирования DOM.
- Тесты всегда выполняются последовательно в том порядке, в котором они добавляются в пакет.
- Отладка на тестовой странице с помощью Firebug.
- Синтаксис аналогичен JUnit при использовании JQUnit, но прост в освоении при использовании QUnit.
Минусы
- Будет сложно реализовать автоматизацию.

Другие советы

Я думаю, что Jack — лучший фреймворк для макетирования JavaScript на момент написания этой статьи.Основная причина в том, что то, что подходит для JavaScript, вряд ли подходит для строго типизированного языка, такого как Java.

Многие фреймворки для макетирования JavaScript созданы на основе фреймворков для макетирования Java (например, таких как превосходный JsMockito).Но проблема с ними в том, что они требовать внедрение зависимостей, потому что это единственный разумный способ использовать насмешку в Java.Но в JavaScript существует МНОГИЕ способы использования макетирования, и вы не принужденный в повсеместное использование внедрения зависимостей.

Например, с помощью JsMockito вам нужно создавать макеты, а затем передать эти издевательства в ваше тестируемое программное обеспечение (SUT).SUT должен напрямую вызывать макеты.Таким образом, вы вынуждены кодировать SUT как конструктор или функцию, которая принимает все свои зависимости в качестве параметров.(Иногда это хороший способ реализовать, но не во всех случаях.Хвост виляет собакой, если дизайн вашей насмешливой среды требует вашего подхода к реализации).

В JavaScript очень легко «захватить» любую функцию.Таким образом, существует множество способов создать что-то такое, что вы можете имитировать части этого, не внедряя в него явным образом его зависимости.Например, Джек позволяет издеваться любой функция, независимо от того, является ли она общедоступной или локальной.Оттуда вы можете шпионить за ним, блокировать его или выражать свои ожидания.Ключевой момент заключается в следующем: как только вы имитируете функцию, ЛЮБЫЕ вызовы этой исходной функции вместо этого будут направлены на ваш макет..Другими словами, ваши макеты все равно будут использоваться, даже если была вызвана исходная, не-макетированная функция.В результате вам не придется вводить зависимости, хотя вы, безусловно, можете сделать это в тех случаях, когда это необходимо.

JavaScript — это другой язык, чем Java (и C# и т. д.). Он допускает различные идиомы реализации. Внедрение зависимостей по-прежнему остается одним из ценных инструментов в наборе инструментов JavaScript, но это уже не единственная игра в городе. Ваша насмешливая среда должна знать и уважать этот факт.Джек и еще несколько человек так и делают, но из тех, кто это делает, Джек кажется самым зрелым и многофункциональным.

Я не уверен, почему никто не упомянул JsTestDriver!Это должен быть один из немногих инструментов тестирования JS, который действительно работает так, как вы и ожидаете, если бы вы использовали инструменты модульного тестирования на других языках.

Запуск тестов можно выполнять, не затрагивая браузер, вы можете интегрировать его с IDE, вы можете интегрировать его с системами непрерывной интеграции...Да, и он быстрый и может запускать тесты в нескольких браузерах одновременно.

Вы также можете использовать с ним другие среды тестирования, такие как YUITest, что делает его еще лучше.

ЮИ-тест
TDD с тестом YUI

YUI Test — это среда тестирования библиотеки пользовательского интерфейса Yahoo.Он используется Yahoo для тестирования собственной библиотеки и имеет синтаксис, аналогичный jUnit.

Как и jsUnit, YUI Test имеет собственную консоль журналирования, которая может выводить информацию, предупреждения и ошибки в дополнение к результатам каждого теста.

YUI также предоставляет возможность отправлять отчеты о результатах в формате JSON или XML.

YUI Test имеет лицензию BSD.

Плюсы
- Действительно хорошая документация
- Активное сообщество
- Регулярные выпуски
- Синтаксис аналогичен jUnit (наборы тестов, утверждения и настройка/демонтаж)
- Асинхронная поддержка
- Подходит для тестирования DOM.
- Тесты всегда выполняются последовательно в том порядке, в котором они добавляются в пакет.

Минусы
- Автоматизация нетривиальна в реализации, но менее сложна, чем другие платформы.

Также проверьтеhttp://sinonjs.org/

Тестовые шпионы Тестовые заглушки Моки Поддельные таймеры Поддельный XHR Поддельный сервер Песочница Утверждения

Он работает вместе с qUnit, и на данный момент это плюс.

Это довольно хороший обзор фреймворков для создания макетов, доступных для Javascript:

http://testdrivenwebsites.com/2010/05/06/java-script-mock-frameworks-comparison

Мы использовали jsspec jsspec.Очень приятно, если вам нравятся rspec и BDD.Только что увидел статья Джастина Гетланда об использовании его «без головы».

Для насмешек в JavaScript взгляните на qMock, фреймворк, который мы с коллегой написали в дополнение к нашему использованию QUnit.Хотя последний вариант отлично подходит для модульных тестов, он не позволяет проводить очень эффективное тестирование асинхронной/бизнес-логики.Мы не пометили ни один выпуск как стабильный, но там есть несколько приличных документов, и если вы проверите svn, вы увидите, что сам qmock имеет модульные тесты, которые довольно очевидны.

Да, и чтобы автоматизировать тестирование как часть сборки, мы использовали простой селеновый скрипт для навигации по нашему набору тестов (одна страница тестирования на каждый JS-файл) и «прослушивали» класс CSS «прошел» или «не прошел» (добавленный QUnit).Это работает и без головы для IE/FF2 AFAIK.

Что касается разработки Mozilla, я влюбляюсь в НРБ, основанный на MozUnit, но все еще активный.Имеет приятные функции, такие как макет сервера или методы сна/удачи.

Я использую тестовую среду Screw Unit и написал свою собственную. насмешливая библиотека под названием jsMocha который активно использовался в компании, в которой я работаю, более 6 месяцев.

Я знаю, что вы просите JQuery-совместимые фреймворки, но я хочу добавить script.aculo.us в смесь для полноты.У них есть модульный тест люкс, это неплохо.

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

http://thefrontside.net/crosscheck

Вы могли бы попробовать ХтмлЮнит который имел Версия, совместимая с JQuery более года назад.

Преимущество HtmlUnit в том, что он не управляет браузером и поэтому работает БЫСТРО.

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

JsUnit запускается либо из браузера, через его плагин Eclipse, либо автоматически через задачу ANT.Вы создаете HTML-страницу с набором тестовых функций, которые должны быть названы с префиксом «test», включая тестируемый JS-файл.Когда какое-либо утверждение внутри функции дает сбой, вся функция терпит неудачу и прекращает выполнение.Не существует гарантированного порядка выполнения этих тестов.Вы можете создать setup() и teardown() функции.

Лицензия:GPL, ГЛПЛ, МПЛ

Плюсы

  • Автоматизация относительно проста в реализации
  • Много функционала
  • Синтаксис похож на JUnit.

Минусы

  • Не подходит для тестирования DOM, поскольку тесты выполняются внутри iFrame.
  • Нет гарантии, что тесты будут запускаться в том порядке, в котором они написаны.
  • Невозможно использовать Firebug на странице тестраннера.Необходимо открыть еще одну вкладку с реальным тестовым кодом.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top