Может ли транспортир и карма использоваться вместе?

Если Protractor заменяет Angular Scenario Runner для тестирования E2E, означает ли это, что я все еще смогу использовать его с Karma в качестве платформы тестирования E2E?

Ответ 1

Не рекомендуется действующим мастером Транспортатора:

https://github.com/angular/protractor/issues/9#issuecomment-19927049

Транспортир и Карма не должны использоваться вместе; вместо этого они предоставляют отдельные системы для запуска тестов. Транспортир и карма охватывают различные аспекты тестирования. Карма предназначена главным образом для модульных испытаний, в то время как Protractor следует использовать для сквозного тестирования.

Транспортир построен поверх WebDriverJS, который использует сервер Selenium/WebDriver для предоставления браузерам и выполнения тестирования диска. Примеры чистого WebDriverJS можно найти здесь: http://code.google.com/p/selenium/wiki/WebDriverJs

и

https://github.com/angular/protractor/issues/9#issuecomment-19931154

Georgios - я считаю, что имеет смысл держать Protractor и Karma отдельными - для тестов на конец вам нужно управлять собственным движением и гибкостью webdriver, в то время как для модульных тестов вы хотите быстро выполнить и автоматизировать файлы.

Ответ 2

UPDATE. Вот простой простой пакет, который я создал, чтобы добавить минимальную настройку Karma в любой проект с помощью одной команды npm install min-karma.


Я хотел бы пояснить некоторые возможные заблуждения относительно Кармы и Транспортера. Карма FAQ на самом деле ссылается на Адаптер для Angular Scenario Runner, который, однако, кажется заброшен, рекомендуется вместо Protractor.


Karma

Karma - это тестовый бегун, который будет запускать файлы JavaScript, указанные в файл конфигурации явно или используя node -globs. (Для внешних шаблонов без JavaScript, Angular Руководство по тестированию устройств рекомендует использовать Префактор Karma html, чтобы сначала скомпилировать их в JavaScript.)

Это могут быть все ваши исходные файлы, некоторые из них, некоторые из них, а также некоторые дополнительные файлы или файлы, не имеющие отношения к вашему проекту, только предоставление дополнительной настройки - вы называете это!  Вы можете иметь несколько конфигурационных файлов кармы для разных целей, которые можно запускать параллельно или по одному. Каждый процесс кармы запускает собственный набор браузеров (они доступны в настоящее время).

Эта функция Карма для запуска только набора файлов - это то, что делает ее идеальной для быстрых тестов, выполняющихся в фоновом режиме при каждом редактировании исходного файла, и получать немедленную обратную связь, что является блестящим! Единственный минус - это "шумные" сообщения об ошибках, которые, надеюсь, улучшатся!


Карма не только для модульных тестов

Unit test - для одного блока вашего исходного кода. В случае Angular типичным элементом является Angular Компонент (Service, Factory, Provider, Controller, Filter, Directive и т.д.). Не забудьте сохранить тонкость Controllers, поэтому слишком много модульных тестов для последних - красный флаг.

В Unit test все другие единицы кода, от которых зависит данное устройство (так называемые зависимости от единицы), не должны быть протестированы одновременно. Вместо этого их следует "издеваться", например. заменены чем-то простым, как фиктивные экземпляры. Angular обеспечивает отличную поддержку среды разработки. В идеале вы хотите видеть все эти макеты непосредственно внутри своих тестов, поэтому вам не нужно задаваться вопросом, откуда взялись все эти зависимости.

Карма столь же полезна для Интеграционные тесты, где группа модулей исходного кода тестируется вместе, с только некоторые из их зависимостей издеваются. Важно помнить, что любая зависимость по умолчанию предоставляется из ваших модулей исходного кода (при условии, что эти модули введены непосредственно в ваши тесты или они зависят от других внедренных модулей (в этом случае вам не нужно их вводить, но не навредить этому). Отмеченные зависимости будут переопределять предоставленные.

Быстрая и частая - главная особенность Карма. Это означает, что вы хотите избежать любых запросов сервера, любых запросов к базе данных, что может занять дольше нескольких секунд. (В противном случае он НЕ будет быстрым!) Эти длинные процессы - это те, которые вы хотите высмеять. Это также объясняет, почему плохая практика заключается в том, чтобы предоставлять сервисы низкого уровня, такие как $http, непосредственно внутри ваших контроллеров или любых сложных бизнес-логических блоков. Упаковывая эти низкоуровневые внешние сервисы связи в более мелкие специализированные сервисы, вы значительно облегчаете их "издеваться".

Что Карма не делает, это запустить ваш сайт так, как есть, что и есть тестирование End-to-End (E2E). В принципе, вы можете использовать внутренние методы Angular для воссоздания сайта или его частей. Который, для небольших кусочков, может быть полезен, и быстрый способ, например, для проверки директив.

Однако, не рекомендуется использовать сложный код внутри ваших тестов. Чем больше вы это делаете, тем больше вероятность, что вы делаете ошибки в этом коде вместо того, что вы на самом деле тестируете.

Вот почему мне лично не нравится часто упоминаемый сложный способ тестирования методов с использованием методов низкого уровня, таких как $http. Он работает более чистым, чтобы изолировать любые ссылки на методы низкого уровня на собственные собственные методы, единственная ответственность которых заключается в том, чтобы делать HTTP-запросы. Эти специальные методы должны иметь возможность работать с реальным бэкэнд, а не поддельным! Что вы можете легко проверить - вручную или даже отлично с помощью Карма, работающей с другим специальным конфигом, если вы не смешиваете эту конфигурацию с той, которая обычно используется для запуска Карма регулярный и быстрый. Теперь, если ваши специализированные небольшие службы были протестированы, вы можете смело и легко имитировать их, чтобы проверить свою другую логику и поместить эти тесты в свою обычную настройку Карма.


Подводя итог. Используйте Карма для запуска любого набора файлов JavaScript. Это (должно быть) быстро. Вы не видите свое полное приложение, поэтому не можете эффективно и надежно проверить окончательный результат. Будет ли я запускать его с помощью Транспортатора? Почему я? Запуск Транспортера замедлит мои тесты, победив цель Карма. Легко запускать Транспортер отдельно.


транспортир

Protractor:

сквозная тестовая среда для приложений AngularJS. Protractor запускает тесты против вашего приложения, работающего в реальном браузере, взаимодействуя с ним как пользователь.

Так Транспортир делает именно то, что Карма не работает - запустите свое реальное окончательное приложение. Это показывает его силу и ограничения:

Выполнение полного приложения - это единственный надежный окончательный тест, в котором ваше приложение работает должным образом. Вы можете написать полные сценарии пользовательских сюжетов и поместить их в свои тесты!

Но сложнее отслеживать ошибки, не выделяя отдельные единицы исходного кода. Вот почему вам по-прежнему нужна Карма, чтобы сначала протестировать ваш код JavaScript.


Теперь я хотел бы запустить Транспортер с Кармой? Я, конечно же, могу запускать их в отдельных терминальных окнах параллельно. В принципе, я мог бы поделиться с ними тестовыми файлами, но, как правило, лучше не буду. Зачем? Потому что я хочу, чтобы мои тесты были небольшими с единственной целью.

Единственным исключением будет файл, определяющий тестовые макросы, полезные для обоих участников. Это, однако, не будет тестовым файлом, а файлом определения макроса.

Кроме этого, мне нравится четкое разделение между моими испытаниями. Те, которые будут выполняться часто и быстро, и те, для полного приложения. Это делает четкое разделение между использованием Карма и Транспортером.

Ответ 3

Karma - это тестер, предоставляемый командой Angular. Karma выполнит ваши тесты в нескольких браузерах, что обеспечит совместимость нашего приложения во всех браузерах. Unit тест для угловой JS может быть использован карма + жасмин

Jasmine - это модуль модульного тестирования javascript, который предоставит нам утилиты для тестирования нашего приложения. Это лучше всего работает на платформе Angular и, следовательно, на нашем выборе "инструмента автоматического модульного тестирования". https://github.com/shahing/testingangularjs

А Protractor - это комплексная тестовая среда для приложений Angular и AngularJS. Protractor запускает тесты для вашего приложения, работающего в реальном браузере, безголовых браузерах, кроссбраузерное тестирование и может быть размещено на поддонах.

https://github.com/shahing/Protractor-Web-Automation