Ajax-управляемая среда подтверждения времени выполнения JavaScript - PullRequest
11 голосов
/ 15 февраля 2011

Работая над большим веб-приложением с растущим количеством кода JavaScript, мы провели мозговой штурм о том, как улучшить качество кода.

Одной из первых идей было введение модульных тестов. Это будет долгосрочная цель; однако это не устранит наиболее распространенные причины регрессии: изменение DOM и проблемы браузера.

Модульные тесты выполняются в фиктивной среде без DOM и отсутствуют на странице.

То, что я ищу, - это структура утверждений, которую можно вставить в код следующим образом:

var $div = $("div.fooBarClass");
assertNotEmpty($div);
$div.fooBarAction();

Я нашел платформы утверждений, которые могут это делать, но все они либо входят в консоль, либо в DOM, либо открывают глупое всплывающее окно. Ни один из них не работает вместе с (тысячами) автоматизированных тестов. То, что я ищу, - это структура подтверждения во время выполнения, которая регистрирует ошибочное утверждение через AJAX! В идеале это должно быть:

  • Встроенные общие утверждения.
  • Интеграция с модулями JQuery, замыкания.
  • Записать (через Ajax) утверждение, имя файла, страницу, номер строки , причину сбоя, некоторые предварительно настроенные переменные среды (браузер, версия выпуска и т. Д.).
  • Поддержка обратных вызовов в случае сбоев. (Если какая-либо инфраструктура утверждений может просто сделать это, я был бы рад написать обратные вызовы, выполняющие часть Ajax.)
  • Хорошо работает со всеми браузерами.
  • Тривиально исключить из производственного выпуска.
  • База поддерживаемых кодов.

Ответы [ 3 ]

2 голосов
/ 02 марта 2011

Мы использовали YUI Test Library .Кажется, он работает довольно хорошо.

Имеет множество методов подтверждения для разных типов

Существуют утверждения для равенства, одинаковости, истинности, ложности, типа объекта и дажеСравнение элементов массива.

Позволяет фиктивным объектам тестировать объекты DOM и другие функции Наш код выполняет много вызовов AJAX или требует методов / объектов, которые не нужно тестировать (как они проверены в другом месте).Используя объекты Mock, мы можем сказать тестам, чего ожидать.Например:

var mockXhr = Y.Mock();

//I expect the open() method to be called with the given arguments
Y.Mock.expect(mockXhr, {
    method: "open",
    args: ["get", "/log.php?msg=hi", true]                            
});

Работает со всеми браузерами

Мы проводим наши тесты в IE, Chrome и Firefox, за исключением некоторых различий в том, что такое бегун тестов.само по себе выглядит так, как работает!

Тривиально исключить из производственного выпуска

У нас весь наш тестовый код в отдельной папке, которая обращается ко всему производственному коду.Исключить тесты из производства так же просто, как исключить папку.

Поддерживаемая кодовая база

YUI 3 используется на домашней странице Yahoo и, похоже, поддерживается в хорошем состоянии.

0 голосов
/ 11 марта 2011

Похоже, я не ищу похожее решение.

Я собираюсь написать свой собственный, переопределяющий console.assert, чтобы сделать вызов ajax, когда аргументы оцениваются как false.

ОБНОВЛЕНИЕ: Вот оно, все еще в разработке, https://github.com/gaboom/qassert

0 голосов
/ 15 февраля 2011

Я знаю, что это не то, что вы просили, но я настоятельно рекомендую Selenium для автоматического тестирования веб-приложений.

  • Встроенные общие утверждения.
  • Он может протестировать любую инфраструктуру JS, потому что он управляет браузером, в котором работает ваш код.
  • Имеет надежные функции ведения журнала.
  • Поддержка браузеров зависит от вашей ОС, но поддерживаются все основные браузеры.
  • Нет ничего, что можно исключить из производственной версии, потому что тесты являются внешними по отношению к приложению.
  • База кода в хорошем состоянии, и вы имеете полный контроль над вашими тестами.
...