Транспортир - Концепции тестирования Javascript
Поскольку знание JavaScript необходимо для работы с Protractor, в этой главе давайте подробно разберемся с концепциями тестирования JavaScript.
Тестирование и автоматизация JavaScript
JavaScript - самый популярный язык сценариев с динамической типизацией и интерпретацией, но наиболее сложной задачей является тестирование кода. Это потому, что, в отличие от других компилируемых языков, таких как JAVA и C ++, в JavaScript нет этапов компиляции, которые могут помочь тестировщику выявить ошибки. Кроме того, тестирование в браузере занимает очень много времени; следовательно, существует потребность в инструментах, поддерживающих автоматическое тестирование JavaScript.
Концепции автоматизированного тестирования
Всегда полезно писать тест, потому что он улучшает код; Проблема с ручным тестированием заключается в том, что оно занимает немного времени и подвержено ошибкам. Процесс ручного тестирования довольно утомителен и для программистов, так как им нужно повторять процесс, писать спецификации тестов, менять код и обновлять браузер несколько раз. Кроме того, ручное тестирование также замедляет процесс разработки.
По указанным выше причинам всегда полезно иметь некоторые инструменты, которые могут автоматизировать эти тесты и помочь программистам избавиться от этих повторяющихся и утомительных шагов. Что нужно сделать разработчику, чтобы автоматизировать процесс тестирования?
По сути, разработчик может реализовать набор инструментов в CLI (интерпретатор командной строки) или в IDE разработки (интегрированная среда разработки). Затем эти тесты будут выполняться непрерывно в отдельном процессе, даже без участия разработчика. Автоматическое тестирование JavaScript также не ново, и было разработано множество инструментов, таких как Karma, Protractor, CasperJS и т. Д.
Типы тестирования для JavaScript
Для разных целей могут быть разные тесты. Например, некоторые тесты написаны для проверки поведения функций в программе, а некоторые другие написаны для проверки выполнения модуля или функции. Таким образом, у нас есть следующие два типа тестирования -
Модульное тестирование
Тестирование проводится на самой маленькой тестируемой части программы, называемой модулем. Блок в основном тестируется изолированно, без какой-либо зависимости этого блока от других частей. В случае JavaScript отдельный метод или функция, имеющая определенное поведение, может быть единицей кода, и эти единицы кода должны тестироваться изолированно.
Одно из преимуществ модульного тестирования заключается в том, что тестирование модулей может выполняться в любом порядке, поскольку модули независимы друг от друга. Еще одно преимущество модульного тестирования, которое действительно имеет значение, заключается в том, что он может запускать тест в любое время следующим образом:
- С самого начала процесса разработки.
- После завершения разработки любого модуля / функции.
- После изменения любого модуля / функции.
- После добавления любой новой функции в существующее приложение.
Для автоматизированного модульного тестирования приложений JavaScript мы можем выбирать из множества инструментов и фреймворков тестирования, таких как Mocha, Jasmine и QUnit.
Сквозное тестирование
Его можно определить как методологию тестирования, используемую для проверки того, нормально ли работает поток приложения от начала до конца (от одного конца до другого) согласно проекту.
Сквозное тестирование также называется функциональным / поточным тестированием. В отличие от модульного тестирования, сквозное тестирование проверяет, как отдельные компоненты работают вместе как приложение. Это основное различие между модульным тестированием и сквозным тестированием.
Например, предположим, что если у нас есть модуль регистрации, в котором пользователь должен предоставить некоторую действительную информацию для завершения регистрации, тогда тестирование E2E для этого конкретного модуля будет выполнять следующие шаги для завершения тестирования:
- Сначала он загрузит / скомпилирует форму или модуль.
- Теперь он получит DOM (объектную модель документа) элементов формы.
- Затем запустите событие нажатия кнопки отправки, чтобы проверить, работает она или нет.
- Теперь для проверки соберите значение из полей ввода.
- Затем необходимо проверить поля ввода.
- В целях тестирования вызовите поддельный API для хранения данных.
Каждый шаг дает свои результаты, которые будут сравниваться с ожидаемым набором результатов.
Теперь возникает вопрос, хотя этот вид E2E или функционального тестирования можно также выполнять вручную, зачем нам для этого нужна автоматизация? Основная причина в том, что автоматизация упростит этот процесс тестирования. Некоторые из доступных инструментов, которые можно легко интегрировать с любым приложением, для этой цели - это Selenium, PhantomJS и Protractor.
Инструменты и фреймворки для тестирования
У нас есть различные инструменты и фреймворки для тестирования Angular. Ниже приведены некоторые из хорошо известных инструментов и фреймворков.
Карма
Карма, созданная Войтой Джиной, является бегуном-тестером. Изначально этот проект назывался Testacular. Это не тестовая среда, а это означает, что она дает нам возможность легко и автоматически запускать модульные тесты JavaScript в реальных браузерах. Karma была создана для AngularJS, потому что до Karma не было инструмента автоматического тестирования для веб-разработчиков JavaScript. С другой стороны, с помощью автоматизации, предоставляемой Karma, разработчики могут запустить простую единственную команду и определить, прошел ли весь набор тестов или нет.
Плюсы использования Кармы
Ниже приведены некоторые преимущества использования Karma по сравнению с ручным процессом.
- Автоматизирует тесты в нескольких браузерах, а также на разных устройствах.
- Следит за файлами на предмет ошибок и исправляет их.
- Предоставляет онлайн-поддержку и документацию.
- Упрощает интеграцию с сервером непрерывной интеграции.
Минусы использования кармы
Ниже приведены некоторые недостатки использования Кармы:
Основным недостатком использования Karma является то, что для его настройки и обслуживания требуется дополнительный инструмент.
Если вы используете средство запуска тестов Karma с Jasmine, тогда меньше документации для поиска информации о настройке вашего CSS в случае наличия нескольких идентификаторов для одного элемента.
Жасмин
Jasmine, управляемая поведением среда разработки для тестирования кода JavaScript, разработана в Pivotal Labs. До активной разработки фреймворка Jasmine аналогичная фреймворк для модульного тестирования под названием JsUnit также был разработан Pivotal Labs, у которого есть встроенный инструмент запуска тестов. Тесты браузеров можно запускать через тесты Jasmine, включив файл SpecRunner.html или используя его также в качестве средства запуска тестов командной строки. Его также можно использовать с кармой или без нее.
Плюсы использования жасмина
Ниже приведены некоторые плюсы использования жасмина:
Фреймворк, не зависящий от браузера, платформы и языка.
Поддерживает разработку через тестирование (TDD) и разработку на основе поведения.
По умолчанию имеет интеграцию с Karma.
Легко понять синтаксис.
Предоставляет тестовые шпионы, подделки и сквозные функции, которые помогают с тестированием в качестве дополнительных функций.
Минусы использования жасмина
Ниже приводится недостаток использования Жасмина -
Пользователь должен возвращать тесты по мере их изменения, потому что в Jasmine нет функции просмотра файлов во время выполнения теста.
Мокко
Mocha, написанный для приложений Node.js, представляет собой среду тестирования, но также поддерживает тестирование браузера. Он очень похож на Jasmine, но основное различие между ними в том, что Mocha нужен плагин и библиотека, потому что он не может работать автономно в качестве тестовой среды. С другой стороны, Жасмин автономна. Однако Mocha более гибок в использовании, чем Jasmine.
Плюсы использования Mocha
Ниже приведены некоторые плюсы использования Mocha:
- Mocha очень легко установить и настроить.
- Удобная и простая документация.
- Содержит плагины с несколькими проектами узлов.
Минусы использования мокко
Ниже приведены некоторые минусы использования Mocha:
- Нужны отдельные модули для утверждений, шпионов и т. Д.
- Также требуется дополнительная настройка для использования с Karma.
QUnit
QUint, первоначально разработанный Джоном Ресигом в 2008 году как часть jQuery, представляет собой мощный, но простой в использовании набор модульных тестов JavaScript. Его можно использовать для тестирования любого универсального кода JavaScript. Хотя он ориентирован на тестирование JavaScript в браузере, разработчику его очень удобно использовать.
Плюсы использования QUnit
Ниже приведены некоторые преимущества использования QUnit:
- Простота установки и настройки.
- Удобная и простая документация.
Минусы использования QUnit
Ниже приводится недостаток использования QUnit -
- Он был в основном разработан для jQuery и, следовательно, не очень хорош для использования с другими фреймворками.
Селен
Selenium, первоначально разработанный Джейсоном Хаггинсом в 2004 году в качестве внутреннего инструмента в ThoughtWorks, представляет собой инструмент автоматизации тестирования с открытым исходным кодом. Selenium определяет себя как «Selenium автоматизирует браузеры. Это оно!". Автоматизация браузеров означает, что разработчики могут очень легко взаимодействовать с браузерами.
Плюсы использования Selenium
Ниже приведены некоторые преимущества использования Selenium:
- Содержит большой набор функций.
- Поддерживает распределенное тестирование.
- Имеет поддержку SaaS через такие службы, как Sauce Labs.
- Простота использования, простая документация и доступные ресурсы.
Минусы использования Selenium
Ниже приведены некоторые недостатки использования Selenium:
- Основным недостатком использования Selenium является то, что он должен выполняться как отдельный процесс.
- Конфигурация немного обременительна, так как разработчику нужно выполнить несколько шагов.