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

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

Поведение ключевого слова "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) для оценки ваших знаний,...
716
0
534 547
12

Ответы 12

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

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

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

Спасибо за предложение Dojo Object Harness, я бы никогда его не нашел. Я ценю другие предложения - но шаг за шагом.

Mark Levison 19.11.2008 18:06

Я действительно использовал это в предыдущем проекте и нашел это бесценным. Но опять же, я не могу сравнивать - я не использовал никакой другой фреймворк TDD.

Rakesh Pai 19.11.2008 20:20

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

Eugene Lazutkin 25.03.2011 21:01

Что мне не нравится в DOH, так это то, что номера строк не сообщаются, когда утверждения терпят неудачу. Комментирование их вручную и повторный запуск теста работают.

Aram Kocharyan 01.01.2014 12:08

Dojo заменяет DOH платформой тестирования TheIntern. TheIntern очень мощный и имеет существенные улучшения. sitepen.com/blog/2014/02/18/…

user64141 21.11.2014 01:15

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

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

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

Быстрота: API Watir, работающий на JRuby при поддержке HtmlUnit.

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

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

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

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

SimpleTest - еще один отличный вариант. Я рад, что не занимаюсь расследованием здесь ;-)

Mark Levison 19.11.2008 18:05

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

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

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

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

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

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

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

Имейте в виду, что Yahoo остановила все новые разработки YUI

Peter V. Mørch 24.10.2014 11:04

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

Наглость - средство запуска тестов JavaScript

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

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

GarethOwen 07.03.2012 20:00

google-js-test:

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

  • Extremely fast test startup and execution time, without having to run a browser.
  • Clean, readable output in the case of both passing and failing tests.
  • A browser-based test runner that can simply be refreshed whenever JS is changed.
  • Style and semantics that resemble Google Test for C++.
  • A built-in mocking framework that requires minimal boilerplate code (e.g. no $tearDown or $verifyAll) with style and semantics based on the Google C++ Mocking Framework.

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

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

vsync 08.11.2015 01:58

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

QUnit

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

jsTestDriver, источник

Не могли бы вы объяснить, какова роль каждого из них во всем процессе тестирования и как они связаны друг с другом?

vsync 08.11.2015 02:01

Извините, что прошло много времени и много работы по контракту, чтобы вспомнить подробности по этому поводу.

Tom Stickel 08.11.2015 10:15

Мы добавили интеграцию 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;
  }
}

BusterJS

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

Buster.JS is a new JavaScript testing framework. It does browser testing by automating test runs in actual browsers (think JsTestDriver), as well as Node.js testing.

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