Тестирование интеграции JavaScript для одностраничных приложений

В настоящее время я разрабатываю одностраничное приложение javascript с использованием Sinatra Ruby на стороне сервера и Backbone.js, jQuery, jQuery UI для стороны клиента. Основная цель приложения - позволить клиенту просматривать / редактировать различные виды элементов, причем каждый элемент представляет собой более или менее сложную форму.

Чтобы убедиться, что все работает правильно, я планирую сделать:

  • унитарные тесты с использованием QUnit
  • функциональные / интеграционные тесты

Какие рамки / инструменты вы рекомендуете для интеграционного тестирования в этом случае? Я начал с Selenium, но мне он не очень понравился. Я только начал смотреть на PhantomJS и CasperJS, и они кажутся довольно хорошими для базовых вещей, таких как навигация, нажатие на ссылки,...

Какой твой совет?

1 ответ

Решение

Вы не сказали, что вам не понравилось в Selenium, но я полагаю, что вы уверены в JavaScript, поэтому я рекомендую использовать CasperJS в качестве основного инструмента. Он хорошо работает с одностраничными веб-приложениями и поставляется с собственным инструментом тестирования. Код может все еще быть немного запутанным время от времени, используя вложенный wait положения; справьтесь с этим, убедившись, что вы не пытаетесь сделать слишком много в каждом тесте, а затем, если все еще сложный, рефакторинг. И не забывайте, дизайн для тестирования: если ваш селектор ужасно сложен, подумайте о добавлении <span id="xxxx">...</span> вокруг, так что ваши тесты могут идти прямо к этому!

Вы можете использовать CasperJS как с PhantomJS, так и со SlimerJS. Сейчас я предпочитаю SlimerJS, так как:

  • PhantomJS 1.x застрял в старом WebKit (эквивалент Safari 5.1 и Chrome 13), поэтому тестирование любых более современных функций разочаровывает.
  • SlimerJS может работать с движком Gecko или напрямую с установленной вами версией Firefox. Это позволяет вам настроить профиль Firefox с дополнительными плагинами, сертификатами безопасности и т. Д.
  • SlimerJS написан на JavaScript, поэтому его легче взломать, если у вас есть такая необходимость.

Когда выйдет PhantomJS 2.0 (надеюсь, в конце 2013 года) или если ваш сайт не использует какие-либо последние API-интерфейсы HTML5, вы можете запустить CasperJS дважды, чтобы получить двойное покрытие. (Кстати, PhantomJS, естественно, безголовый; SlimerJS должен использовать Xvfb, который является только Linux или Mac.)

Что Selenium дает вам больше, так это то, что вы можете управлять другими браузерами, в частности IE. (Хотя, конечно, для IE вам нужно запустить компьютер с Windows.) Selenium, как и SlimerJS, нужен Xvfb, чтобы быть безголовым (опять же, за исключением Windows). (Кстати, документы Selenium по поддерживаемым браузерам давно не обновлялись, но я предполагаю, что более поздние версии каждого браузера имеют по крайней мере ту же поддержку, что и там).

Другие вопросы по тегам