Можно ли использовать транспортир и карму вместе?
Если Protractor заменит Angular Scenario Runner для тестирования E2E, означает ли это, что я все еще смогу использовать его с Karma в качестве моей инфраструктуры тестирования E2E?
2 ответа
Не рекомендуется текущим сопровождающим Protractor:
https://github.com/angular/protractor/issues/9
Транспортир и Карма не должны использоваться вместе; вместо этого они предоставляют отдельные системы для запуска тестов. Транспортир и Карма охватывают различные аспекты тестирования - Карма предназначена главным образом для модульных тестов, в то время как Транспортир должен использоваться для сквозного тестирования.
Protractor построен поверх WebDriverJS, который использует сервер Selenium/WebDriver для обеспечения браузеров и выполнения теста диска. Примеры чистого WebDriverJS можно найти здесь: http://code.google.com/p/selenium/wiki/WebDriverJs
А также
https://github.com/angular/protractor/issues/9
Георгиос - Я думаю, что имеет смысл разделять Protractor и Karma - для сквозных тестов вы хотите использовать встроенное управление событиями и гибкость веб-драйвера, в то время как для модульных тестов вы хотите быстрое выполнение и автоматическое наблюдение за файлами.
ОБНОВИТЬ. Вот простой пакет, который я создал для добавления минимальной настройки Karma в любой проект с помощью одной команды npm install min-karma
,
Я хотел бы прояснить некоторые возможные неправильные представления о Карме и Транспортире. Часто задаваемые вопросы о карме действительно относятся к адаптеру для Angular's Scenario Runner, который, однако, кажется, заброшен, вместо него рекомендуется транспортир.
Карма
Karma - это тестовый прогон, который будет запускать файлы JavaScript, указанные в вашем файле конфигурации явно или с использованием узловых глобусов. (Для внешних шаблонов, отличных от JavaScript, Руководство по тестированию модулей Angular рекомендует использовать препроцессор Karma html, чтобы сначала скомпилировать их в JavaScript.)
Это могут быть все ваши исходные файлы, некоторые из них, некоторые из них, а также некоторые дополнительные файлы или файлы, не относящиеся к вашему проекту, только обеспечивающие некоторую дополнительную конфигурацию - вы называете это! У вас может быть несколько конфигурационных файлов кармы для разных целей, которые вы можете запускать параллельно или по одному. Каждый процесс кармы запускает свой собственный набор браузеров (они в настоящее время доступны).
Эта особенность Karma для запуска только набора файлов - это то, что делает его идеальным для быстрых тестов, запускаемых в фоновом режиме при каждом редактировании исходного файла, и получения немедленной обратной связи, что просто замечательно! Единственный минус - это "шумные" сообщения об ошибках, которые, надеюсь, улучшатся!
Карма не только для юнит-тестов
Модульный тест для одной единицы вашего исходного кода. В случае Angular типичной единицей является Angular Component (Service, Factory, Provider, Controller, Filter, Directive
так далее). Не забудьте сохранить свой Controllers
тонкий, так что слишком много юнит-тестов для последних это красный флаг.
В модульном тесте все остальные модули кода, от которых зависит этот модуль (так называемые зависимости модуля), не должны тестироваться одновременно. Вместо этого они должны быть "осмеяны", например, заменены чем-то простым, например, фиктивными экземплярами. Angular обеспечивает отличную поддержку макета среды. В идеале вы хотите видеть все эти насмешки непосредственно внутри ваших тестов, поэтому вам не нужно удивляться, откуда взялись все эти зависимости.
Карма также полезна для интеграционных тестов, где группа модулей исходного кода тестируется вместе, и только некоторые из их зависимостей подвергаются проверке. Важно помнить, что любая зависимость по умолчанию предоставляется из ваших модулей исходного кода (если эти модули либо внедряются непосредственно в ваши тесты, либо являются зависимостями от других внедренных модулей (в этом случае вам не нужно вводить их)., но без вреда для этого). Пересмотренные зависимости будут переопределять предоставленные.
Быстрый и частый бег - главная особенность кармы. Это означает, что вы хотите избегать любых запросов к серверу, запросов к базе данных, всего, что может занять больше, чем доли секунды. (В противном случае это НЕ будет быстрым!) Эти длинные процессы - те, которые вы хотите высмеять. Это также объясняет, почему плохая практика ставить сырые низкоуровневые сервисы, такие как $http
непосредственно внутри ваших контроллеров или любых сложных логических модулей. Оборачивая эти низкоуровневые внешние коммуникационные сервисы в более мелкие выделенные сервисы, вы значительно облегчаете "насмешку над ними".
Что Карма не делает, так это работает ваш сайт таким, какой он есть, что и является сквозным (E2E) тестированием. В принципе, вы можете использовать внутренние методы Angular для воссоздания сайта или его фрагментов. Что, для небольших частей, может быть полезным и быстрым способом, например, для проверки директив.
Однако это не рекомендуемый способ бросать сложный код в ваши тесты. Чем больше вы это делаете, тем больше вероятность того, что вы сделаете ошибки в этом коде вместо того, что вы фактически тестируете.
Вот почему мне лично не нравятся часто упоминаемые сложные методы тестирования с использованием низкоуровневых методов, таких как $http
, Он работает чище, чтобы изолировать любую ссылку на низкоуровневые методы на ваши собственные специализированные методы, единственной обязанностью которых является выполнение http-запросов. Эти специальные методы должны работать с реальным бэкэндом, а не с фальшивым! Что вы можете легко протестировать - вручную или даже отлично, если Karma работает с другой специальной конфигурацией, если вы не смешиваете эту конфигурацию с той, которая обычно используется для обычной и быстрой работы Karma. Теперь, протестировав свои выделенные небольшие сервисы, вы можете легко и безопасно смоделировать их, чтобы протестировать другую логику и вставить эти тесты в свою обычную настройку Karma.
Подвести итоги. Используйте Karma для запуска любого набора файлов JavaScript. Это (должно быть) быстро. Вы не видите свое законченное приложение, поэтому не можете эффективно и надежно проверить конечный результат. Буду ли я запустить его с транспортиром? Почему я? Запуск Protractor замедлил бы мои испытания, нанеся поражение цели Кармы. Транспортир легко запустить отдельно.
Транспортир
Транспортир это:
Сквозная тестовая среда для приложений AngularJS. Protractor запускает тесты для вашего приложения, работающего в реальном браузере, взаимодействуя с ним, как пользователь.
Таким образом, Protractor делает именно то, чего не делает Карма - запускает ваше настоящее окончательное приложение. Это показывает его силу и ограничения:
Запуск завершенного приложения - это единственный надежный финальный тест, который работает как ожидается. Вы можете написать полные сценарии пользовательских историй и применить их в своих тестах!
Но отслеживать ошибки труднее, не изолируя отдельные единицы вашего исходного кода. Вот почему вам все еще нужно, чтобы Karma сначала проверила ваш код JavaScript.
Теперь я хотел бы запустить транспортир с кармой? Я, конечно, могу запустить их в отдельных окнах терминала, параллельно. В принципе, я мог бы заставить их делиться тестовыми файлами, если мне нужно, но обычно я бы предпочел этого не делать. Зачем? Потому что я хочу, чтобы мои тесты были небольшими с единственной целью.
Единственным исключением будет файл, определяющий макросы тестирования, полезные для обоих участников. Однако это будет не тестовый файл, а файл определения макроса.
Помимо этого, мне нравится четкое разделение между моими тестами. Те, которые будут запускаться часто и быстро, и те, для полного приложения. Это делает четкое разделение между использованием кармы и транспортиром.
Да, вы можете использовать карму и транспортир вместе. Karma используется для модульного тестирования компонента, который вы создали с помощью команды angular, вы можете протестировать эти компоненты с помощью karma. Транспортир используется для сквозного теста. В основном он используется для тестирования пользовательского интерфейса.
Karma - это тестер, предоставленный командой Angular. Karma выполнит ваши тесты в нескольких браузерах, что обеспечит совместимость нашего приложения во всех браузерах.Модульный тест для угловой JS может быть использован карма + жасмин
Jasmine - это модуль модульного тестирования javascript, который предоставит нам утилиты для тестирования нашего приложения. Это лучше всего работает на платформе Angular и, следовательно, на нашем выборе "инструмента автоматического модульного тестирования". https://github.com/shahing/testingangularjs
А Protractor - это комплексная тестовая среда для приложений Angular и AngularJS. Protractor запускает тесты для вашего приложения, работающего в реальном браузере, безголовых браузерах, кроссбраузерное тестирование и может быть размещено на поддонах.