Чи можна використовувати Protractor і Karma разом?


104

Якщо Protractor замінить Angular Scenario Runner для тестування E2E, чи це означає, що я все одно зможу використовувати його разом з Karma як мою основу тестування E2E?


ІМО ви повинні мати можливість. Карма - просто бігун тестів. Після того, як ви пишете / будуєте свої тестові випадки в Protractor .... карма повинна мати можливість просто запустити її, коли запитаєте. Так само ви можете попросити Карму запустити тести E2E.
скеп

1
@skeep Webdriver породжує і підключається до браузерів через протокол WebDriver - те, що Карма не підтримує (замість цього використовується WebSockets та веб-сторінка). Вони виконують подібні завдання дуже різними способами. Тепер уже застарілі тести Karma E2E не використовують WebDriver і страждають за це - вони повинні підтримувати стан у веб-переглядачі (стан WebDriver повністю поза процесом браузера).
Енді

Відповіді:


102

Не рекомендується поточним технічним обслуговувачем Protractor:

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

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

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

І

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

Георгіос - Я думаю, що має сенс тримати Protractor і Karma окремо - для тестування до кінця, ви хочете, щоб ви працювали з рідною подією та гнучкістю веб-драйвера, тоді як для тестових одиниць потрібно швидко виконувати та автоматично переглядати файли.


Чи все-таки це правда, що нам не слід запускати транспортер з Карми?
ErikAGriffin

@theLateWizard Абсолютно правда, не тільки ви не повинні, ви не можете :)
Дмитро Зайцев

74

ОНОВЛЕННЯ. Ось простий пакет, який я створив, щоб додати мінімальну настройку Karma до будь-якого проекту однією командою npm install min-karma.


Я хотів би прояснити деякі можливі помилки щодо Карми та транспортира . Карма FAQ на насправді відноситься до адаптера для скошеного за сценарієм Runner , який, проте, здається, відмовився, з транспортир рекомендує замість цього.


Карма

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

Це можуть бути всі ваші вихідні файли, деякі з них, деякі з них, а також додаткові файли або файли, неістотні для вашого проекту, лише надаючи додаткову конфігурацію - ви це називаєте! Ви можете мати декілька файлів конфігурації карми для різних цілей, які можна запускати паралельно або по одному. Кожен процес карми запускає свій власний набір браузерів (зараз вони доступні) .

Ця функція від карми запускати тільки набір файлів , що робить його ідеальним для швидких тестів працюють у фоновому режимі при кожному файлі редагування джерела, і отримати негайну зворотний зв'язок, яка є блискучою! Єдиний мінус - це "шумне" повідомлення про помилки, яке, сподіваємось, покращиться!


Карма не тільки для одиничних тестів

Тест одиниці призначений для однієї одиниці вашого вихідного коду. У випадку Angular типовою одиницею є кутова складова ( Service, Factory, Provider, Controller, Filter, Directiveтощо). Не забудьте зберегти свій Controllersтонкий, тому занадто багато тестових одиниць для латерів - це червоний прапор .

В одиничному тесті не слід перевіряти одночасно всі інші одиниці коду, від яких залежить ця одиниця (так звані залежності одиниці). Натомість їх слід «знущатися», наприклад замінювати чимось простим, як манекени. Angular забезпечує чудову підтримку навколишнього середовища . В ідеалі ви хочете побачити всі ці знущання безпосередньо у ваших тестах, тому вам ніколи не потрібно замислюватися, звідки беруться всі ці залежності.

Карма так само корисна для інтеграційних тестів , де група одиниць вихідного коду тестується разом, і з них висміюються лише деякі їх залежності . Важливо пам’ятати, що будь-яка залежність за замовчуванням надається від модулів вихідного коду (до тих пір, поки ці модулі або вводяться безпосередньо у ваші тести , або є залежностями інших введених модулів (у цьому випадку вам не потрібно вводити їх) , але не шкода для цього). Знущаються залежності переможуть надані.

Біг швидко і часто - головна особливість Карми . Це означає, що ви хочете уникати будь-яких запитів сервера, будь-яких запитів до бази даних, нічого, що може зайняти більше часу, ніж частки секунд. ( Інакше це НЕ буде швидким! ) Ці довгі процеси - це ті, над якими ви хочете знущатися . Це також пояснює, чому невірно застосовувати необроблені сервіси низького рівня, наприклад $httpбезпосередньо у контролерах або будь-яких складних підрозділах бізнес-логіки. Перетворюючи ці низькі рівні зовнішніх комунікаційних послуг на менші спеціалізовані сервіси, ви набагато простіше "знущатися над ними".

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

Однак не рекомендується закидати складний код всередині тестів. Чим більше ви це робите, тим більше шансів на те, що ви робите помилки в цьому коді замість того, що ви насправді тестуєте.

Ось чому мені особисто не подобається часто згадуваний складний спосіб тестування методів, таких як низький рівень $http. Це працює чистіше, щоб виділити будь-які посилання на методи низького рівня у власні спеціальні методи , відповідальність за які полягає у складанні http-запитів. Ці спеціальні методи повинні мати можливість працювати з реальним бекендом , а не підробкою! Що ви можете легко протестувати - вручну або навіть ідеально добре, якщо Karma працює з іншим спеціальним конфігурацією , доки ви не змішаєте цю конфігурацію з тією, що зазвичай використовується для запуску Karmaрегулярні та швидкі. Тепер, перевіривши ваші виділені невеликі сервіси, ви можете сміливо та легко знущатися над ними, щоб перевірити вашу іншу логіку та помістити ці тести у звичайні налаштування Кари .


Узагальнити. Використовуйте Karma для запуску будь-якого набору файлів JavaScript. Це (повинно бути) швидко. Ви не бачите повного додатка, тому не можете перевірити кінцевий результат ефективно та надійно. Я б запустив його з Трантрактором ? Чому б я? Запуск Protractor уповільнив би мої випробування, перемігши призначення Карми . Легко запускати Protractor окремо.


Транспортир

Транспортер :

тестова основа для програм AngularJS. Protractor запускає тести на вашу програму, що працює в реальному браузері, взаємодіючи з нею як користувач.

Тож Protractor робить саме те, що не робить Карма - запустіть свою справжню остаточну заявку. Це виявляє і його силу, і обмеження:

Запуск повної програми - єдиний надійний підсумковий тест, який працює у вашій програмі, як очікувалося. Ви можете написати цілі сценарії історій користувача та поставити їх у свої тести!

Але важче відстежувати помилки, не виділяючи окремі одиниці вихідного коду. Ось чому вам все-таки потрібна Карма, щоб спочатку перевірити свій код JavaScript.


Тепер я хотів би запустити Protractor разом з Кармою ? Я, безумовно, можу їх запускати в окремих термінальних вікнах, паралельно. В принципі, я міг би змусити їх обмінюватися тестовими файлами, якщо мені потрібно, але, як правило, я не хочу. Чому? Тому що я хочу, щоб мої тести були маленькими з єдиною цільовою метою.

Єдиним винятком буде файл, що визначає тестові макроси, корисні для обох бігунів. Однак це не тестовий файл, а файл визначення макросу .

Крім цього, мені подобається чітке розмежування між моїми тестами. Ті, які потрібно запускати часто і швидко, і такі, які потрібно використовувати для повного додатка. Це робить чіткий поділ між використанням Karma та Protractor .


Якщо я хочу тестування одиниць, а також тестування e2e, тоді мені доведеться налаштувати середовище карми для тестування одиниць та транспортира для тестування інтерфейсу або тестування e2e?
Суніл Гарг

@SunilGarg Так, якщо хочете використовувати і те, і інше, але, як я вже писав, Карма не тільки для одиниць тестування.
Дмитро Зайцев

1

Karma - тестовий запуск, який надає команда Angular, Karma виконує ваші тести в декількох браузерах, що гарантує, що наша програма сумісна з усіма браузерами. Блок тесту на кутові js можна використовувати карму + жасмин

Жасмін - це тестова рамка JavaScript, і надасть нам утиліти для тестування нашої програми. Це найкраще працює в кутовій рамці, і, таким чином, наш вибір "автоматизованого інструменту тестування блоків". https://github.com/shahing/testingangularjs

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

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


1

Так, ви можете використовувати карму та транспортир разом. Карма використовується для одиничного тестування компонента, який ви створили за допомогою кутової команди, ви можете протестувати ці компоненти за допомогою карми. Транспортер використовується для тестування в кінці. В основному використовується для тестування на інтерфейс користувача.


Для цього вам потрібно додати конфігурацію як для карми, так і для транспортира
Рахул
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.