Статьи

Мы не можем больше не тестировать JavaScript

Вы должны проверить свое веб-приложение. Поскольку текущий год — 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 сейчас.