16

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

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

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

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

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

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

ответ

3

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

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

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

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

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

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

4

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

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

+0

Спасибо за ссылку на Capybara-envjs! Может ли это использоваться за пределами мира Rails (например, в любом устаревшем веб-приложении)? –

2

article рекомендует Akephalos.

+0

Правильно, что я искал, объединив Capybara и не-GUI HTML-модуль/интерпретатор JS, спасибо! – victorcampos

2

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

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

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

Смежные вопросы