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

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

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

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

Библиотека / ссылка Джека, кажется, мертва.

Alex Nolasco 25.03.2011 20:46

Тестирование QUnit намного проще с помощью Grunt

Steven McConnon 28.04.2012 00:00

Джек github.com/keronsen/jack

Anders B 16.05.2012 13:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
42
3
22 069
14
Перейти к ответу Данный вопрос помечен как решенный

Ответы 14

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

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

http://thefrontside.net/crosscheck

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

Лицензия: GPL, GLPL и MPL

Плюсы

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

Минусы

  • Не очень подходит для тестирования DOM, поскольку он запускает тесты внутри iFrame.
  • Нет гарантии, что тесты будут запускаться в том порядке, в котором они написаны.
  • Невозможно использовать Firebug на странице тестировщика. Необходимо открыть еще одну вкладку с фактическим тестовым кодом.
Ответ принят как подходящий

QUnit
jqUnit
Написание тестов JavaScript с помощью QUnit и jqUnit

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

jqUnit - это модифицированная версия QUnit, которая добавляет функции настройки, удаления и утверждения, которые более типичны для платформы xUnit, и инкапсулирует все в одну глобальную переменную.

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

QUnit: MIT или GPL (выберите) jqUnit: Лицензия MIT

Плюсы

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

Минусы

  • Автоматизацию будет сложно внедрить

Один из минусов теперь можно убрать: QUnit больше не требует jQuery.

pope 25.03.2010 21:46

Другой недостаток также был удален: теперь вы можете запускать автоматические тесты QUnit из .NET с помощью NQUnit (robdmoore.id.au/blog/2011/03/13/…)

Adrian Grigore 21.10.2011 12:56

Также последние минусы уходят с code.google.com/p/js-test-driver

gavenkoa 11.02.2013 17:49

YUI Test
TDD с тестом YUI

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

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

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

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

Плюсы

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

Минусы

  • Реализовать автоматизацию нетривиально, но она менее сложна, чем другие фреймворки.

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

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

Преимущество HtmlUnit в том, что он не управляет браузером, поэтому это быстрый.

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

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

Да, и чтобы автоматизировать тестирование как часть сборки, мы использовали простой скрипт Selenium для навигации по нашему набору тестов (одна тестовая страница на файл JavaScript) и «прослушивали» класс CSS «прошел или не прошел» (добавлен QUnit). Это работает без головы, а также для Internet Explorer и Firefox 2, AFAIK.

Что касается разработки Firefox, я влюбился в UXU, основанный на MozUnit, но он все еще активен. У него есть приятные функции, такие как фиктивный сервер и методы sleep / yeld.

"yeld"? Do you mean "урожай"?
Peter Mortensen 11.01.2021 10:39

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

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

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

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

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

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

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

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

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

Ненавижу ставить +1 к чему-то, но это действительно хорошая трактовка концепции насмешки в JS.

Adam Tolley 24.01.2014 09:13

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

У него есть тестовые шпионы, тестовые заглушки, моки, поддельные таймеры, поддельный XMLHttpRequest (XHR), поддельный сервер, песочница и утверждения.

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

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

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

Ссылка не работает: «К сожалению, запрошенная страница не может быть найдена».

Peter Mortensen 11.01.2021 10:49

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