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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Взгляните на фреймворк для модульного тестирования Dojo Object Harness (DOH), который в значительной степени независим от фреймворка для модульного тестирования JavaScript и не имеет никаких зависимостей от Dojo. Есть очень хорошее описание этого на Модульное тестирование приложений Web 2.0 с использованием Dojo Objective Harness.
Если вы хотите автоматизировать тестирование пользовательского интерфейса (больной вопрос многих разработчиков) - ознакомьтесь с дох.робот(временное неработоспособное обновление: другая ссылка http://dojotoolkit.org/reference-guide/util/dohrobot.html) и dijit.robotx(временное отключение). Последний предназначен для приемочных испытаний. Обновлять:
В упомянутых статьях объясняется, как их использовать, как имитировать взаимодействие пользователя с вашим пользовательским интерфейсом с помощью мыши и / или клавиатуры и как записать сеанс тестирования, чтобы вы могли «воспроизвести» его позже автоматически.
Я действительно использовал это в предыдущем проекте и нашел это бесценным. Но опять же, я не могу сравнивать - я не использовал никакой другой фреймворк TDD.
Спасибо за сообщение о мертвых ссылках. Я обновил один из них и заменю ссылки на документы роботов, как только они появятся на новом веб-сайте.
Что мне не нравится в DOH, так это то, что номера строк не сообщаются, когда утверждения терпят неудачу. Комментирование их вручную и повторный запуск теста работают.
Dojo заменяет DOH платформой тестирования TheIntern. TheIntern очень мощный и имеет существенные улучшения. sitepen.com/blog/2014/02/18/…
У вас есть «работает в реальном браузере» как профессионал, но, по моему опыту, это минус, потому что он медленный. Но что делает его ценным, так это отсутствие достаточной эмуляции JS со стороны альтернатив, не связанных с браузером. Может случиться так, что если ваш JS достаточно сложен, достаточно будет только теста в браузере, но есть еще пара вариантов, которые следует рассмотреть:
HtmlUnit: «Он имеет довольно хорошую поддержку JavaScript (которая постоянно улучшается) и может работать даже с довольно сложными библиотеками AJAX, имитируя Firefox или Internet Explorer в зависимости от конфигурации, которую вы хотите использовать». Если его эмуляция достаточно хороша для вашего использования, она будет намного быстрее, чем запуск браузера.
Но, может быть, у HtmlUnit достаточно хорошая поддержка JS, но вам не нравится Java? Тогда возможно:
Быстрота: API Watir, работающий на JRuby при поддержке HtmlUnit.
или аналогично
Schnell: еще одна оболочка JRuby для HtmlUnit.
Конечно, если HtmlUnit недостаточно хорош и вам нужно управлять браузером, вы можете подумать о Watir для управления вашим JS.
MochiKit имеет среду тестирования под названием SimpleTest, которая, похоже, прижилась. Вот сообщение в блоге от оригинального автора.
SimpleTest - еще один отличный вариант. Я рад, что не занимаюсь расследованием здесь ;-)
Вас также может заинтересовать структура модульного тестирования, которая является частью qooxdoo, среды RIA с открытым исходным кодом, аналогичной Dojo, ExtJS и т. д., Но с довольно обширной цепочкой инструментов.
Попробуйте онлайн-версию тестер. Подсказка: нажмите серую стрелку в левом верхнем углу (чтобы сделать ее более очевидной). Это кнопка «играть», которая запускает выбранные тесты.
Чтобы узнать больше о JS-классах, которые позволяют определять ваши модульные тесты, см. Онлайн-версию Программа просмотра API.
Для автоматического тестирования пользовательского интерфейса (на основе Selenium RC) ознакомьтесь с проектом Симулятор.
YUI также имеет структура тестирования. Это видео от Yahoo! Театр - хорошее введение, хотя есть много основ о TDD заранее.
Эта структура является универсальной и может работать с любой библиотекой JavaScript или JS.
Имейте в виду, что Yahoo остановила все новые разработки YUI
Раздел JavaScript статьи Википедии, Список фреймворков модульного тестирования, предоставляет список доступных вариантов. Он указывает, работают ли они на стороне клиента, на стороне сервера или на обеих сторонах.
Я создал проект с открытым исходным кодом под названием Chutzpah, который является средством выполнения тестов для модульных тестов JavaScript. Chutzpah позволяет запускать модульные тесты JavaScript из командной строки и изнутри Visual Studio. Он также поддерживает работу на сервере непрерывной интеграции TeamCity.
Я только начал использовать Chutzpah для запуска тестов Jasmine внутри Visual Studio - он прекрасно интегрирован: щелкните правой кнопкой мыши тестовый файл и выберите «запустить тесты js» или «запустить тесты JS в браузере». Я запускаю те же тесты жасмина с помощью JSTestDriver. Я предпочитаю Chutzpah, потому что я указываю, какие файлы мне нужно загружать, в верхней части тестового файла. Для JSTestDriver мне нужен отдельный файл конфигурации.
Фреймворк для тестирования 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
$tearDownor$verifyAll) with style and semantics based on the Google C++ Mocking Framework.
В настоящее время нет двоичных файлов для Windows
Кажется, он почти не интересен Github, также он требует ОС на базе unix, и я большой поклонник Windows, я не выхожу из дома, не поцеловав свою машину Windows на прощание.
Теперь мы используем Qunit вместе с Павловым и JSTestDriver. Этот подход хорошо работает для нас.
Не могли бы вы объяснить, какова роль каждого из них во всем процессе тестирования и как они связаны друг с другом?
Извините, что прошло много времени и много работы по контракту, чтобы вспомнить подробности по этому поводу.
Мы добавили интеграцию 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 от Кристиана Йохансена, автора книги «Разработка через тестирование 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.
Спасибо за предложение Dojo Object Harness, я бы никогда его не нашел. Я ценю другие предложения - но шаг за шагом.