2012-07-31 4 views
49

필자는 루비 코드를위한 테스트를 작성해 왔지만, 프론트 엔드 개발자로서이 코드를 프론트 엔드 코드로 작성하는 것에 관심이있다.프론트 엔드 테스트 : 테스트 대상 및 방법, 사용할 툴은 무엇입니까?

사람들이 테스트를 위해 사용하는 : 내가 놀아 된 꽤 몇 가지 다른 옵션이있다? 그리고 그 이상으로 사람들은 무엇을 테스트합니까? 그냥 자바 스크립트? 모래밭? 양식? 하드 코드 된 콘텐츠?

모든 의견을 크게 기뻐할 것입니다.

+1

[지속적인 테스트 : Ruby, Rails 및 JavaScript 사용] (http://www.amazon.com/Continuous-Testing-Ruby-Rails-JavaScript/dp/1934356700)에서 좋은 조언을 얻을 수 있습니다. . 나는이 책을 6 ~ 8 개월 전에 읽었고 노드로 재스민을 사용하여 브라우저를 조롱하는 방법에 대해 많은 도움을 주었다. 불행히도 실제로 연습 할 기회가 없었습니다. – Augusto

+0

흥미 롭군요, 고마워 할 수도 있습니다 :) –

답변

4

많은 옵션과 도구가 있습니다. 그러나 선택은 웹 UI를 가지고 있는지 아니면 데스크톱 응용 프로그램인지에 달려 있습니다.

앞서 언급 한 도구에서 가정하면 웹 UI입니다. 나는 셀레늄 (aka WebDriver)을 제안 할 것이다 : http://seleniumhq.org/docs/

다양한 언어가 지원된다 (Ruby가 목록에있다). 그것은 다양한 브라우저에 대해 실행될 수 있습니다. 사용 가능한 많은 자습서와 팁으로 사용하기가 쉽습니다. 아, 물론 무료입니다. :)

+0

감사합니다. 도움이 되셨을 것입니다. –

+0

예, Selenium 2 (WebDriver)는 웹 응용 프로그램의 자동화 된 테스트를위한 훌륭한 도구입니다. –

80

나는 몇 달 전에 같은 질문을 던졌고, 많은 개발자와 이야기하고 많은 연구를 한 결과, 이것은 내가 알아 낸 것입니다. JavaScript를 단위 테스트하고 작은 UI 통합 테스트 세트를 작성하고 레코드 및 재생 테스트 도구를 사용하지 않아야합니다. 더 자세히 설명해 드리겠습니다.

먼저 test pyramid을 고려해보십시오. 이것은 마이크 코 (Mike Cohn)가 작성한 재미있는 비유로서 어떤 종류의 테스트를해야할지 결정하는 데 도움이됩니다. 피라미드의 하단에는 견고하고 빠른 피드백을 제공하는 단위 테스트가 있습니다. 이것들은 테스트 전략의 기초가되어야하며 따라서 피라미드의 가장 큰 부분을 차지합니다. 상단에는 UI 테스트가 있습니다. Selenium처럼 UI와 직접 상호 작용하는 테스트입니다. 이러한 테스트가 버그를 찾는 데 도움이 될 수 있지만, 더 비싸고 피드백이 매우 느립니다. 또한 사용하는 도구에 따라 매우 취약 해 지므로 실제 생산 코드를 작성하는 것보다이 테스트를 유지하는 데 더 많은 시간을 소비하게됩니다. 중간에있는 서비스 계층에는 UI가 필요없는 통합 테스트가 포함되어 있습니다. 예를 들어 Rails에서는 DOM 요소와 상호 작용하는 대신 REST 인터페이스를 직접 테스트 할 것이다.

이제 질문에 답변하십시오. 자바 프로젝트에 대한 충분한 단위 테스트를 작성함으로써 Spring Roo (Java)로 작성된 웹 애플리케이션 인 Java 프로젝트의 버그 수를 크게 줄일 수 있다는 것을 알게되었습니다. 내 응용 프로그램에는 JS에 작성된 논리가 많이 있으며 여기에서 테스트하는 것은 일종의 종류입니다. 페이지가 실제로 어떻게 보이는지 또는 애니메이션이 제대로 작동하는지 걱정하지 않습니다. 요소 클래스가 올바르게 할당되고 오류 조건이 잘 처리되면 JS에서 작성한 모듈이 예상되는 논리를 실행하는지 테스트합니다. 이 테스트에서는 Jasmine을 사용했습니다. 이것은 훌륭한 도구입니다. 그것은 배우기가 매우 쉽고 스파이라고 불리는 좋은 조롱 능력을 가지고 있습니다. Jasmine-jQuery은 jQuery를 사용하는 경우 더 뛰어난 기능을 추가합니다. 특히, HTML 코드 스 니펫 (snippet) 인 조명기를 지정할 수 있으므로 DOM을 수동으로 조롱 할 필요가 없습니다. 이 도구를 maven과 통합했으며이 테스트는 CI 전략의 일부입니다.

특히 Selenium과 같은 녹음/재생 도구를 사용하는 경우 UI 테스트에주의해야합니다. UI가 자주 바뀌므로이 테스트는 계속 파괴되므로 테스트가 실제로 실패했는지 또는 구식인지 여부를 확인하는 데 많은 시간을 할애해야합니다. 또한 단위 테스트만큼 가치를 추가하지 않습니다. 실행 환경이 통합 된 환경이 필요하기 때문에 개발 완료 후 상황을 수정하는 비용이 더 많이 소요되는 경우에만 실행하는 것이 좋습니다.

그러나 연기/회귀 테스트의 경우 UI 테스트가 매우 유용합니다. 이러한 작업을 자동화해야하는 경우 몇 가지 위험을주의해야합니다. 테스트를 작성하고 기록하지 마십시오.. 기록 된 테스트는 대개 코드에서 수행하는 모든 작은 변화에 따라 자동으로 생성되는 xpaths에 의존합니다. Cucumber는 이러한 테스트를 작성하기위한 훌륭한 프레임 워크이며 WebDriver와 함께 브라우저 상호 작용을 자동화 할 수 있습니다. 테스트에 대한 코드 생각은입니다. UI 테스트에서는 복잡한 xpath를 사용하지 않아도되므로 요소를 쉽게 찾을 수 있어야합니다. 클래스와 id 요소를 추가하면 일반적으로 빈번하지 않을 것입니다. 모든 작은 코너 케이스에 대한 테스트를 작성하지 마십시오.이 테스트는 비용이 많이 들고 쓰기가 너무 오래 걸립니다. 대부분의 기능을 탐색하는 사례에 중점을 두어야합니다. 이 수준에서 너무 많은 테스트를 작성하면 이전에 단원 테스트에서 테스트 한 것과 동일한 기능을 테스트하게됩니다 (작성한 것으로 가정).

현재 프로젝트에서 Spock과 Geb를 사용하여 UI 테스트를 작성하고 있습니다. 나는이 공구가 굉장하다는 것을 발견한다. Groovy로 작성되었습니다. Java 프로젝트에 더 적합합니다.

+0

"Spock and Geb"는 무료입니까? 나는 오픈 소스를 의미합니까? –

+0

예, 무료입니다. – carlos

+1

규칙 검사 또는 기타 비즈니스 논리를 수행하는 실제 단위를 테스트하는 단위는 훌륭합니다. 그러나 이러한 종류의 너겟과 마법사를 통한 테스트 흐름에는 큰 차이가 있습니다. 사용자 입력을 통해 대화 상자가 나타나거나 모든 수신기가 올바른 요소 나 위젯에서 올바른 이벤트를 수신하는지 확인해야합니다. –

0

비록이 포스트가 많은 좋아하는 것을 얻었지만 지금은 많은 테스트를 작성하고 프론트 엔드를 테스트하는 방법이 많이 바뀌었기 때문에 제 대답을 제 질문에 게시합니다. 카르마는 모카 & qunit 같은 다른 테스트 스위트와 함께 잘 작동하지만

그래서 FE 시험의 관점에서 나는 Jasminekarma를 사용하여 많은 시간을 보냈다. 이러한 것들이 훌륭하고 카르마를 사용하면 브라우저와 직접 인터페이스하여 테스트를 실행할 수 있습니다. 단점은 테스트 스위트가 커짐에 따라 상당히 느려질 수 있다는 것입니다.

저는 최근에 Jest으로 옮겼습니다. 쓰기가 더 빠르면 작성한 응답 응용 프로그램에서 enzyme 스냅 샷 테스트를 사용하면 정말 좋은 적용 범위를 얻을 수 있습니다. 적용 범위에 대해 말하기 Jest는 이스탄불의 보험 적용 범위를 설정하고 설정하고 조롱하는 것이 사용하기 쉽습니다. 브라우저에서 테스트하지 않는 단점은 jsdom이라는 빠른 것을 사용하지만 몇 가지 불만이 있습니다. 개인적으로 필자는 webpack/babel을 통해 내 코드를 컴파일 할 때 크로스 브라우저 버그가 상당히 적고 아주 멀리 있다는 것을 의미하므로 특히 큰 문제는 아니지만 수동으로 어쨌든 테스트하면 문제가되지 않습니다.).

레일 스택 내에서 작업하는 측면에서 웹 패커 보석을 사용할 수 있고 npm과 노드를 사용하는 것이 일반적으로 훨씬 더 많아졌습니다. nvm을 사용하여 노드 버전을 관리하는 것이 좋습니다

엄격한 테스트는 아니지만 linting을 사용하는 것이 좋습니다 (코드에서 많은 문제를 해결하기 때문입니다). JS를 들어 내가 테스트하는 것에 측면에서 stylelint

를 사용 prettier 및 SCS들/CSS로 eslint을 사용하여, 나는 카를로스 테스트 피라미드에 대해 이야기 모든 이론은 변경되지 않습니다 후, 여전히 도구 관련라고 생각합니다 . 또한 테스트에 대해 실용적으로 추가 할 것이고, 나는 항상 테스트 할 것이지만 프로젝트에 어떤 레벨과 적용 범위가 의존 할 것인가에 달려 있습니다. 짧은 라이프 사이클 프로젝트를 테스트하기 위해 시간과 지출 시간/일을 관리하는 것이 중요합니다.대규모/장기 프로젝트는 더 큰 테스트 슈트의 이점이 분명히 커집니다.

어쨌든 나는 그 질문을 보는 사람들을 돕기를 바랍니다.

관련 문제