각도기와 카르마를 함께 사용할 수 있습니까?


104

Protractor 가 E2E 테스트를 위해 Angular Scenario Runner를 대체하고 있다면 Karma 와 함께 E2E 테스트 프레임 워크로 사용할 수 있다는 의미 입니까?


IMO 당신이 할 수 있어야합니다. Karma는 테스트 러너입니다. Protractor에서 테스트 케이스를 작성 / 만들면 카르마는 요청을받을 때 실행할 수 있어야합니다. Karma에게 현재 E2E 테스트를 실행하도록 요청할 수있는 것과 같은 방법입니다.
skeep

1
@skeep Webdriver는 WebDriver 프로토콜을 통해 브라우저를 생성하고 연결합니다. Karma는 지원하지 않습니다 (대신 WebSocket과 웹 페이지를 사용함). 그들은 매우 다른 방식으로 유사한 작업을 수행합니다. 현재 사용되지 않는 Karma E2E 테스트는 WebDriver를 사용하지 않고 문제가 있습니다. 브라우저 내에서 상태를 유지해야합니다 (WebDriver 상태는 완전히 브라우저 프로세스 외부에 있음).
Andy

답변:


102

현재 Protractor 관리자가 권장하지 않음 :

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

각도기와 Karma를 함께 사용해서는 안됩니다. 대신 테스트 실행을위한 별도의 시스템을 제공합니다. Protractor와 Karma는 테스트의 다양한 측면을 다룹니다. Karma는 주로 단위 테스트 용이며 Protractor는 종단 간 테스트에 사용해야합니다.

Protractor는 Selenium / WebDriver 서버를 사용하여 브라우저를 프로비저닝하고 테스트 실행을 추진하는 WebDriverJS 위에 구축됩니다. 순수한 WebDriverJS의 예는 http://code.google.com/p/selenium/wiki/WebDriverJs 에서 찾을 수 있습니다 .

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

Georgios-Protractor와 Karma를 별도로 유지하는 것이 합리적이라고 생각합니다. 엔드 투 엔드 테스트의 경우 네이티브 이벤트 구동 및 웹 드라이버의 유연성을 원하고 단위 테스트의 경우 파일의 빠른 실행 및 자동 감시를 원합니다.


Karma에서 Protractor를 실행해서는 안된다는 것이 여전히 사실입니까?
ErikAGriffin 2015 년

@theLateWizard 절대 사실,뿐만 아니라 당신은 : 당신이 할 수없는, 안
드미트리 Zaitsev

74

최신 정보. 다음은 하나의 명령으로 모든 프로젝트에 최소 Karma 설정을 추가하기 위해 만든 간단한 패키지npm install min-karma 입니다.


KarmaProtractor 에 대한 오해 가능성을 명확히하고 싶습니다 . Karma FAQ는 실제로 Adapter for Angular의 Scenario Runner를 참조 하지만, 대신 Protractor 가 권장되는 포기한 것처럼 보입니다 .


카르마 실행하는 테스트 주자 자바 스크립트 파일을 지정당신이 파일을 구성 명시 적으로 또는 사용하여 노드 globs의를 . (JavaScript가 아닌 외부 템플릿의 경우 Angular의 단위 테스트 가이드 에서는 먼저 Karma html 전처리기를 사용하여 JavaScript로 컴파일 할 것을 권장 합니다.)

이들은 모든 소스 파일, 일부 , 일부 및 프로젝트 와 관련없는 일부 추가 파일 또는 파일 될 수 있으며 일부 추가 구성 만 제공 할 수 있습니다. 서로 다른 목적을 위해 여러 개의 karma 구성 파일을 가질 수 있으며 병렬 또는 하나씩 실행할 수 있습니다. 각 카르마 프로세스는 자체 브라우저 세트를 실행합니다 (현재 사용 가능) .

파일 세트 만 실행 하는 Karma 의이 기능 은 각 소스 파일 편집시 백그라운드에서 실행되는 빠른 테스트에 적합하며 즉각적인 피드백을받을 수 있습니다. 유일한 단점은 "시끄러운"오류보고로 개선 될 것입니다!


Karma는 단위 테스트만을위한 것이 아닙니다.

단위 테스트 는 소스 코드의 단일 단위에 대한 것입니다. Angular의 경우 일반적인 단위는 Angular Component Service, Factory, Provider, Controller, Filter, Directive등입니다. 당신의 유지 기억 Controllerslatters 위해 얇은 때문에 너무 많은 단위 테스트하는 것은입니다 붉은 깃발 .

A의 단위 테스트 , 본 기기가 의존하는 코드의 다른 모든 단위, 동시에 테스트 할 수 없습니다한다 (단위의 종속성을 소위). 대신에 "모의"되어야합니다. 예를 들어 더미 인스턴스와 같은 간단한 것으로 대체됩니다. Angular는 훌륭한 모의 환경 지원을 제공합니다 . 이상적으로는 테스트 내에서 모든 모의를 직접보고 싶으므로 모든 종속성이 어디에서 왔는지 궁금 할 필요가 없습니다.

카르마 단지로 유용 통합 테스트 A, 소스 코드 단위의 그룹이 단지와 함께 테스트 종속성 중 일부는 조롱. 모든 종속성은 기본적으로 소스 코드 모듈에서 제공된다는 점을 기억하는 것이 중요합니다 (해당 모듈이 테스트에 직접 주입 되거나 주입 된 다른 모듈의 종속성 인 경우 (이 경우 주입 할 필요가없는 경우) ,하지만 그렇게해도 해가되지 않습니다.) 모의 종속성이 제공된 종속성을 재정의합니다.

빠르고 자주 실행하는 것이 Karma 의 주요 기능입니다 . 즉, 서버 요청, 데이터베이스 쿼리, 몇 초보다 오래 걸릴 수있는 모든 것을 피하려고합니다. ( 그렇지 않으면 빠르지 않을 것입니다! ) 그 긴 프로세스는 당신이 조롱 하고 싶은 프로세스 입니다. 이것은 또한 $http컨트롤러 또는 복잡한 비즈니스 로직 유닛 내부에 직접 로우 레벨 서비스를 넣는 것이 나쁜 습관 인 이유를 설명합니다 . 이러한 낮은 수준의 외부 통신 서비스 를 더 작은 전용 서비스 로 래핑 하면 "모방"하기가 훨씬 쉬워집니다.

무엇 카르마는 하지 않는 사이트를 실행하면은 엔드 - 투 - 엔드가 (E2E) 테스트가 무엇 인 때문이다. 원칙적으로 Angular의 내부 방법을 사용하여 사이트 또는 그 조각을 다시 만들 수 있습니다. 작은 조각의 경우 유용 할 수 있으며 지시문을 테스트하는 빠른 방법입니다.

그러나 테스트 내부에 복잡한 코드를 던지는 것은 권장되지 않습니다 . 더 많이 수행할수록 실제로 테스트 하는 코드 대신 해당 코드 에서 오류가 발생할 가능성이 높아집니다 .

그렇기 때문에 .NET과 같은 저수준 방법을 사용하여 자주 언급되는 복잡한 방법을 테스트하는 방법을 개인적으로 싫어합니다 $http. 저수준 메서드에 대한 모든 참조를 http 요청을 만드는 유일한 책임 이 있는 전용 메서드 로 분리하기 위해 더 깔끔하게 작동 합니다. 이러한 전용 메서드는 가짜가 아닌 실제 백엔드 에서 작동 할 수 있어야합니다 ! 어떤 당신은 쉽게 테스트 할 수 - 수동으로 또는 완벽하게 정상적으로와 카르마가 실행 다른 특별한 설정 은 일반적으로 실행하는 데 사용되는 하나 그 설정을 혼합하지 않는 한, 카르마를규칙적이고 빠릅니다. 이제 소규모 전용 ​​서비스를 테스트하고 안전하고 쉽게 조롱하여 다른 로직을 테스트하고 이러한 테스트를 일반 Karma 설정에 적용 할 수 있습니다.


요약. Karma 를 사용 하여 JavaScript 파일 세트를 실행하십시오. 빠르다. 완전한 앱이 표시되지 않으므로 최종 결과를 효과적이고 안정적으로 테스트 할 수 없습니다 . Protractor로 실행할 수 있습니까? 내가 왜? Protractor를 실행 하면 내 테스트 속도가 느려지고 Karma 의 목적이 무산 됩니다. 각도기를 별도로 실행하는 것은 쉽습니다 .


길게 끄는 것

각도기 는 :

AngularJS 애플리케이션을위한 엔드-투-엔드 테스트 프레임 워크. Protractor는 실제 브라우저에서 실행되는 애플리케이션에 대해 테스트를 실행하여 사용자가 하듯이 상호 작용합니다.

따라서 ProtractorKarma 가 수행하지 않는 작업을 수행합니다. 실제 최종 응용 프로그램을 실행합니다. 이것은 그 힘과 한계를 모두 보여줍니다.

전체 애플리케이션을 실행 하는 것은 애플리케이션이 예상대로 작동하는 유일한 신뢰할 수있는 최종 테스트입니다. 완전한 사용자 스토리 시나리오를 작성하여 테스트에 넣을 수 있습니다!

그러나 소스 코드의 개별 단위를 분리하지 않고 오류를 추적하기가 더 어렵습니다 . 그렇기 때문에 JavaScript 코드를 먼저 테스트 하려면 Karma 가 여전히 필요 합니다.


이제 Karma 와 함께 Protractor 를 실행하고 싶 습니까? 나는 분명히 별도의 터미널 창에서 병렬로 실행할 수 있습니다. 원칙적으로 필요한 경우 테스트 파일을 공유하도록 할 수 있지만 일반적으로는 그렇지 않습니다. 왜? 단일 전용 목적으로 테스트를 작게 유지하고 싶기 때문입니다.

유일한 예외는 두 러너 모두에게 유용한 테스트 매크로를 정의 하는 파일 입니다. 그러나 이것은 테스트 파일이 아니라 매크로 정의 파일 입니다.

그 외에는 테스트를 명확하게 구분하는 것이 좋습니다. 자주 그리고 빠르게 실행되어야하며 완전한 앱을위한 것입니다. 이는 Karma 를 사용할 때와 Protractor를 사용할 때를 명확히 구분 합니다.


단위 테스트와 e2e 테스트를 원하면 단위 테스트를위한 karma 환경을 구성하고 UI 테스트 또는 e2e 테스트를위한 각도기를 구성해야합니까?
Sunil Garg

@SunilGarg 예, 두 가지를 모두 사용하고 싶다면 Karma는 단위 테스트만을위한 것이 아닙니다.
드미트리 Zaitsev

1

Karma는 Angular 팀에서 제공하는 테스트 실행기입니다. Karma는 여러 브라우저에서 테스트를 실행하여 애플리케이션이 모든 브라우저에서 호환되는지 확인합니다. 각도 js에 대한 단위 테스트는 karma + jasmine을 사용할 수 있습니다.

Jasmine은 자바 스크립트 단위 테스트 프레임 워크이며 애플리케이션을 테스트 할 수있는 유틸리티를 제공합니다. 이는 Angular 프레임 워크에서 가장 잘 작동하므로 "자동 단위 테스트 도구"를 선택했습니다. https://github.com/shahing/testingangularjs

Protractor는 Angular 및 AngularJS 애플리케이션을위한 엔드 투 엔드 테스트 프레임 워크입니다. Protractor는 실제 브라우저, 헤드리스 브라우저, 크로스 브라우저 테스트에서 실행되는 애플리케이션에 대해 테스트를 실행하며 saucelab에서 호스팅 할 수 있습니다.

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


1

예, 카르마와 각도기를 함께 사용할 수 있습니다. Karma는 각도 명령을 사용하여 만든 구성 요소를 단위 테스트하는 데 사용되며 karma를 사용하여 해당 구성 요소를 테스트 할 수 있습니다. 각도기는 종단 간 테스트에 사용됩니다. 주로 UI 테스트에 사용됩니다.


이를 달성하기 위해 당신은 카르마와 각도기 모두에 대한 구성을 추가 할 필요가
라훌 Solanki
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.