Подтвердить что ты не робот

Тестирование интеграции JavaScript в Ruby on Rails

Я немного искал это и попытался реализовать самодельное решение, но до сих пор не нашел его уверенным.

Мне нужно написать интеграционные тесты в Ruby on Rails, которые взаимодействуют с JavaScript и получают программные способы утверждать некоторые поведения. Я использую Test:: Unit для части контроллера/моделей, но я изо всех сил пытаюсь проверить поведение jQuery/JavaScript, используемое моим приложением. В основном он состоит из ajax-вызовов и взаимодействий в пользовательском интерфейсе, который обновляет некоторые наборы информации.

Я не нашел решения, которое делает меня уверенным и которое прекрасно сочетается с автотестом и целым красно-зеленым процессом, поэтому на данный момент большинство частей моего клиентского кода не проверены, и это заставляет меня нервничать (как и следовало ожидать be: P).

Итак, есть ли у кого-нибудь предложения по лучшим практикам в этой проблеме? Групповое тестирование JS немного сложно, как указывает Крокфорд, поскольку он в значительной степени зависит от текущего состояния пользовательского интерфейса и т.д., И как AFAIK даже он не нашел хорошего способа реализовать достойное тестирование...

Вкратце: мне нужно реализовать тесты для некоторого поведения пользовательского интерфейса, который зависит от Ajax, интеграции с автотестом или каким-либо другим инструментом CI и не нашел хорошего и элегантного способа сделать это.

Спасибо всем за внимание, С наилучшими пожеланиями

4b9b3361

Ответ 1

В апреле 2011 года ребята-мыслители обновили свой квест для тестирования javascript. Akephalos упал в немилости по следующим причинам:

Ошибки: как упоминалось ранее, в htmlunit есть ошибки, особенно с jQuerys вживую. Хотя все реализации браузера имеют ошибки, более полезны, если тесты испытывают те же ошибки, что и фактических браузерах.

Совместимость: htmlunit полностью не реализует набор функций, который современные браузеры. Например, он полностью не обрабатывает диапазоны DOM или Загрузка файла Ajax.

Рендеринг: htmlunit фактически не отображает страницу, поэтому тесты, которые зависит от видимости CSS или позиционирования не работает.

Производительность: когда большинство ваших тестов используют Javascript, тестовые комплекты с htmlunit начинает сканирование. Чтобы начать тест, потребуется некоторое время. Akephalos и большой набор тестов легко могут занять 10 или 15 минут.

Таким образом, они развернули собственное решение, которое является открытым исходным кодом - capybara-webkit. Это все еще довольно нова, но похоже, что это сейчас.

Ответ 2

AFAIK, вне комбинации Capybara с Selenium Web -Driver существует очень мало вариантов автоматического тестирования JS-кода. Я использую огурец с веб-драйвером capybara и селена, и поскольку селен-webdriver фактически запускает firefox или chrome, чтобы пройти тестирование конкретной страницы с помощью ajax-звонка, для выполнения ряда тестов требуется значительно больше времени.

Есть несколько альтернатив, но они не работают все время или для всех ситуаций. Например: Capybara с envjs

Ответ 4

Я использовал огурец и капибара с селеном. Это было очень неприятно, потому что селен, похоже, не мог видеть динамически созданный javascript, несмотря на то, что капибара должен был его ждать. Это было в январе 2011 года. Теперь все может быть иначе.

В настоящее время я использую огурец и капибару с акефалосом. До сих пор это было очень сложно, потому что 1. он безголовый, поэтому вы не можете видеть прогресс. Вызов Capybara "save_and_open" помог до некоторой степени. 2. jQuery и akephalos, похоже, не так хорошо сочетаются. Например, запуск на переключателе с jquery.change() работает отлично в хроме, но не в akephalos. Возможно, это намеренно, потому что я потом где-то слышал, что он не работает в IE. Я исправил проблему, используя .click() вместо .change() для переключателя, но так как функция .change была настроена для запуска по кучам вопросов, мне пришлось запрограммировать код, чтобы заставить его работать для теста,

Суть в том, что автоматическое приемочное тестирование javascript в рельсах env все еще незрело и, возможно, больше работы, что стоит.