Есть ли хороший способ сделать это? Я пишу расширение, которое взаимодействует с веб-сайтом в виде скрипта контента и сохраняет данные с помощью localalstorage. Существуют ли какие-либо инструменты, платформы и т. Д., Которые я могу использовать для проверки этого поведения? Я понимаю, что есть несколько общих инструментов для тестирования javascript, но достаточно ли они для тестирования расширения? Модульное тестирование является наиболее важным, но я также заинтересован в других типах тестирования (таких как интеграционное тестирование).
unit-testing
google-chrome
google-chrome-extension
swampsjohn
источник
источник
Ответы:
Да, существующие фреймворки довольно полезны ..
В недавнем прошлом я разместил все свои тесты на «тестовой» странице, которая была встроена в приложение, но недоступна, если не набрана физически.
Например, у меня были бы все тесты на странице, доступной в
chrome-extension://asdasdasdasdad/unittests.html
Тесты будут иметь доступ к
localStorage
т. Д. Для доступа к сценариям содержимого теоретически вы можете проверить это с помощью встроенных IFRAME на своей тестовой странице, однако это больше тестирование уровня интеграции, модульные тесты потребуют от вас абстрагироваться от реальных страниц, чтобы вы могли не зависит от них, также с доступом к localStorage.Если вы хотите протестировать страницы напрямую, вы можете организовать свое расширение для открытия новых вкладок (chrome.tab.create ({"url": "someurl"}). Для каждой из новых вкладок должен работать скрипт содержимого, и вы можете использовать ваш тестовый фреймворк для проверки того, что ваш код сделал то, что должен.
Что касается фреймворков, JsUnit или более поздний Jasmine должны работать нормально.
источник
Работая над несколькими расширениями Chrome, я придумал
sinon-chrome
проект, который позволяет запускать юнит-тесты с использованиемmocha
,nodejs
иphantomjs
.По сути, он создает макеты sinon для всех
chrome.*
API, в которые вы можете поместить любые предопределенные ответы json.Затем вы загружаете свои скрипты, используя узлы
vm.runInNewContext
для фоновой страницы иphantomjs
для всплывающих окон / опций рендера.И, наконец, вы утверждаете, что Chrome API был вызван с необходимыми аргументами.
Давайте рассмотрим пример.
Предположим, у нас есть простое расширение Chrome, которое отображает количество открытых вкладок в значке кнопки.
фоновая страница:
Чтобы проверить это нам нужно:
chrome.tabs.query
для возврата предварительно определенного ответа, например, две вкладки.chrome.*
API в какую-то средуФрагмент кода следующий:
Теперь мы можем обернуть его в
describe..it
функции мокко и запустить из терминала:Вы можете найти полный пример здесь .
Кроме того, sinon-chrome позволяет запускать любое событие chrome с предопределенным ответом, например
источник
В то время как,
sinon.js
кажется, прекрасно работает, вы также можете просто использовать простой жасмин и высмеивать необходимые обратные вызовы Chrome. Пример:издеваться
Тест
Просто измените настройки
SpecRunner.html
по умолчанию для запуска вашего кода.источник
О уже существующем инструменте в Chrome:
В инструменте разработчика Chrome есть раздел Ресурсы для локального хранилища.
Инструменты разработчика> Ресурсы> Локальное хранилище
Смотрите изменения местного хранилища там.
Вы можете использовать console.profile для тестирования производительности и просмотра стека вызовов во время выполнения.
Если вы используете скрипт контента и локальное хранилище вместе без фоновой страницы / скрипта и без передачи сообщений, локальное хранилище будет доступно только с этого сайта. Таким образом, чтобы протестировать эти страницы, вы должны вставить свой тестовый скрипт в эти вкладки.
источник
Я обнаружил, что могу использовать веб-драйвер Selenium для запуска свежего экземпляра браузера с предустановленным расширением и pyautogui для кликов - потому что Selenium не может управлять «просмотром» расширения. После кликов вы можете делать скриншоты и сравнивать их с «ожидаемыми», ожидая 95% сходства (потому что в разных браузерах допустимы перемещения разметки до нескольких пикселей).
источник
Чтобы подтвердить пару предыдущих ответов, Jasmine хорошо работает с расширениями Chrome. Я использую версию 3.4.0.
Вы можете использовать шпионов Jasmine, чтобы легко создавать двойники теста для различных API. Не нужно строить свой собственный с нуля. Например:
Еще немного подробностей, если это поможет:
Как упоминалось в другом ответе, я создал HTML-страницу как часть моего расширения браузера, которое запускает мои тесты. HTML-страница содержит библиотеку Jasmine, а также код JavaScript моего расширения и мой набор тестов. Тесты запускаются автоматически и результаты форматируются для вас. Нет необходимости создавать тестовый прогон или форматировщик результатов. Просто следуйте инструкциям по установке и используйте документ, задокументированный в HTML, для создания своей страницы для запуска теста, а также включите в нее свой набор тестов.
Я не думаю, что вы можете динамически получать фреймворк Jasmine с другого хоста, поэтому я просто включил релиз Jasmine в свое расширение. Я опущу это, а также мои тестовые случаи, когда я, конечно, соберу свое расширение для производства.
Я не смотрел, как выполнять свои тесты в командной строке. Это было бы удобно для инструментов автоматического развертывания.
источник