Вы должны проверить свое веб-приложение. Поскольку текущий год — 2011, а не 2002, вы будете использовать в нем запросы Ajax и определенный объем кода JavaScript. JUnit, PHPUnit, NUnit и другие фреймворки, идеально подходящие для серверных языков, не могут напрямую тестировать ваш код JavaScript, поскольку они не могут его выполнить.
Нет проблем, мы используем инструмент, который использует браузеры для доступа к веб-страницам и может выполнять JavaScript через их включенные интерпретаторы. Selenium, вероятно, является самой известной средой тестирования для приложений на основе JavaScript: вы определяете, где нажимать и когда ждать несколько секунд, и, надеюсь, его полоса станет красной при регрессии, и не слишком часто из-за хрупкости тестирование.
Но, вероятно, JavaScript не является запоздалой мыслью для меня и вас. У вас есть части презентации и бизнес-логики, написанные на JavaScript. Половина или более вашего кода на JavaScript, и, возможно, вы даже используете некоторые из них на стороне сервера с Node.js.
Модульное тестирование кода JavaScript становится обязательным, поскольку мы хотим писать тесты xUnit для наших классов JavaScript вместо тяжелых, медленных и хрупких тестов пользовательского интерфейса.
Итак, давайте посмотрим, какие инструменты для этого доступны: написание тестов не сложно, но помогает набор методов утверждений и базовый тестовый пример.
В браузере
Старая идея, также присутствующая в Selenium, использует DOM и интерпретатор браузера для выполнения JavaScript. Вы загружаете HTML-страницу, и эта страница загружает сценарии и выполняет тесты, отображая красную или зеленую полосу в конце процесса.
FireUnit — это плагин Firefox, созданный Джоном Резигом (из jQuery) в 2008 году. JsUnit — это почти классический инструмент для тестирования JavaScript, начатый как порт JUnit для среды браузера.
Позже JsUnit стал Жасмин .
Jasmine ориентирован на разработку, ориентированную на поведение, и не полагается на DOM, на браузеры или определенные фреймворки. Вы можете использовать его, например, в JS на стороне сервера, как в коде Node.js.
describe("Jasmine", function() {
it("makes testing JavaScript awesome!", function() {
// code a la xUnit
});
});
Jasmine также предоставляет SpecRunner.html для запуска пакета с браузером, на случай, если это самый быстрый способ для вас.
Для рамок
YUI Test — это тестовая среда, изначально созданная для тестов JavaScript-фреймворка Yahoo, но теперь она может использоваться и для кода не из библиотеки YUI. Это происходит от JUnit.
DOH (Dojo Objective harness) — официальный инструмент для тестирования Dojo и связанного кода. Он хорошо вписывается в механизмы dojo.require () / dojo.provide () для загрузки классов:
//Declare out the name of the test module to make dojo's module loader happy. dojo.provide("my.test.module"); doh.register("MyTests", [ function assertTrueTest(){ doh.assertTrue(true); doh.assertTrue(1); doh.assertTrue(!false); } ]);
Существует также неофициальная среда тестирования ExtJS для тех, кто выбрал ее.
Обезглавленный
Большинство сред тестирования JavaScript встроены в браузер: но что, если вы хотите запускать их в среде командной строки, например, на сервере непрерывной интеграции?
Например, вы можете запустить сборку без головы с Mozilla Rhino и Envjs . Rhino — это реализация виртуальной машины JavaScript, не связанной с конкретным браузером, в то время как Envjs предоставляет поддельную среду браузера.
Однако, когда у вас есть встроенная в браузер среда тестирования (которую проще написать), вы можете тестировать непосредственно в браузерах и во многих других (IE, Firefox, Chrome, …). Ваш код никогда не будет запущен в производство в Rhino, но только в Firefox, Chrome, Safari и так далее.
Лучшее из двух миров: JsTestDriver
Прежде всего, JsTestDriver — это бегун, а не сама по себе платформа. Он доступен бесплатно и был создан Google. Он затрагивает сложную часть тестирования JavaScript: не написание тестов, а их выполнение.
JsTestDriver захватывает различные браузеры и запускает в них пакет, как и Selenium. Но JsTestDriver запускает программные тесты xUnit, написанные вами, а не взаимодействуя с пользовательским интерфейсом. Тесты легче писать и не ломаются каждый раз, когда вы меняете имя класса.
JsTestDriver написан на Java (это .jar) и доступен из командной строки. Серверный компонент работает на порту 9876, в то время как клиенты могут подключаться к серверу для выполнения тестов. Клиент также может быть интегрирован с IDE, такой как Eclipse.
Разделение между клиентами и серверами, которое следует примеру Selenium, позволяет распараллеливать тест на нескольких машинах.
Это пример теста, взятый из документации JsTestDriver:
GreeterTest = TestCase("GreeterTest"); GreeterTest.prototype.testGreet = function() { var greeter = new myapp.Greeter(); assertEquals("Hello World!", greeter.greet("World")); };
Это просто, это быстро и надежно. Вы можете начать модульное тестирование в JavaScript сейчас.