Javascript로 무엇을 테스트해야합니까?


12

직장에서, 우리는 방금 자바 스크립트 기반 애플리케이션 (실제로 Coffeescript를 사용하지만 여전히)을 시작했습니다. JsTestDriver와 패브릭을 사용하여 자동화 된 테스트 시스템을 구현했습니다.

우리는 이처럼 많은 Javascript로 무언가를 작성하지 않았으므로 지금까지는 Javascript 테스트를 한 적이 없습니다. 단위 테스트에서 정확히 무엇을 테스트해야하는지 잘 모르겠습니다. 우리는 다양한 것들을 위해 JQuery 플러그인을 작성 했으므로 JsTestDriver를 사용하여 가능한 한 정확성을 검증해야한다는 것이 명백하지만, 우리 팀의 다른 모든 사람들은 우리가 페이지 레벨 Javascript도 테스트해야한다고 생각하는 것 같습니다.

페이지 테스트 Javascript를 단위 테스트로 테스트하지는 않지만 Selenium과 같은 시스템을 사용하여 모든 것이 예상대로 작동하는지 확인해야한다고 생각합니다. 이것에 대한 나의 주된 이유는 현재 페이지 수준 자바 스크립트 테스트가 존재하지 않는 DOM의 요소에 액세스하려고하기 때문에 JsTestDriver를 통해 실패한다는 보장입니다.

그렇다면 Javascript에서 단위 테스트는 무엇입니까?


3
작성한 자바 스크립트 코드를 모듈로 분리합니다. 그런 다음 해당 모듈의 입력 및 출력을 간단히 테스트하십시오. DOM을 다루는 모든 모듈은 DOM을 테스트해야 함을 의미합니다. jsTestDriver보다 나은 도구를 사용하십시오.
Raynos

단위 테스트 비즈니스 로직이어야합니다. DOM의 비즈니스 로직과 요소가 서로 얽혀 있으면 디자인 결함이 있습니다. 페이지 요소에서 가능한 한 많은 비즈니스 로직을 추출하여 올바르게 단위 테스트를 수행하십시오. DOM 요소 상호 작용 확인을 위해서는 Selenium을 사용해야합니다.
maple_shaft

1
@NathanHoad 브라우저 자체에서 실행되는 단위 테스트를 작성합니다. nodeunit, qunit 및 jasmine은 합리적인 도구입니다. 브라우저에서 실행할 때 DOM이 있습니다. testling과 같은 도구를 사용하여 브라우저 테스트를 자동화 할 수 있습니다.
Raynos

1
감사. jsTestDriver가 브라우저에서 실행될 수 있다고 주장하면서 jsTestDriver를 찾고있었습니다. 기술적으로 사실이지만 QUnit으로 실행하는 것과 같지 않다는 것을 알았습니다. QUnit을 사용하는 현재 사용자 정의 Django 디버그 도구 모음 패널을 사용하여 자체 도구를 사용하고 있습니다. Selenium을 사용하여 테스트 실패를 감지 할 수 있습니다. 또한 나는 상사가 테스터 비용을 지불하지 않을 것이라고 의심하지만, 그것은 꽤 좋아 보이지만!
Nathan Hoad

답변:


4

할 수있는 모든 것을 테스트하십시오.

순수한 로직을 쉽게 테스트 할 수 있습니다.

코드가 DOM 또는 네트워크와 상호 작용하면 훨씬 어렵습니다.

특정 DOM 요소가 아닌 임의의 DOM 요소에서 작동하도록 코드를 추출 할 수 있으면 더 쉽게 테스트 할 수 있습니다. (요소가 매개 변수에서 작동하게하십시오).

Ajax를 사용하는 코드는 단순히 고정 된 데이터로 콜백 함수를 호출하여 테스트 할 수 있습니다. 나는 $.ajax내 자신의 기능으로 덮어 쓴 몇 가지 테스트를 받았습니다 . 당신이 끝나면 진짜 하나를 다시 넣어 확인하십시오!

"페이지 수준 자바 스크립트"는 실제로 "단단하게 결합 된 코드"를 의미하며 코드의 일부를 분리하면 독립적으로 테스트 할 수 있습니다.

셀레늄은 단위 테스트 도구가 아닙니다. 고급 시나리오에는 적합하지만 테스트를 수행 할 수 없으며 격리 된 환경에서는 작동하지 않습니다.


jasmine은 함수 호출 및 응답 데이터를 조롱 할 수 있으므로 함수를 재정의하는 대신 살펴볼 수 있습니다.
스티브

각 페이지마다 기능과 그 기능이 있습니다. 내부에서 실행되는 코드를 테스트하는 것에 대해 더 이야기하고있었습니다 $(document).ready(...).
Nathan Hoad

1
그것이 얼마나 큰가의 문제입니다 .... :-) 테스트 된 하나의 명명 된 기능으로 그 기능을 얻을 수 있어야한다고 생각합니다. 그런 다음 테스트되지 않은 코드는 한 줄입니다. (지금은 목표가 아닙니다. 실제로 테스트되지 않은 코드는 항상 두 줄 이상이었습니다.)
Sean McMillan

@SeanMcMillan-DOM에만 영향을 미치는 응용 프로그램의 일부를 테스트하는 것이 매우 어렵다는 것을 알았습니다 (예 : 여러 이벤트를 일부 DOM 요소에만 바인딩하는 함수). 해당 사건이 올바르게 작성되었는지 어떻게 확인 하시겠습니까? 단위 테스트로는 할 수있는 것이 아니라 실제 브라우저 클릭 및 확인 (셀레늄 등 사용)
vsync

@vsync : 클릭 핸들러가 주어진 DOM 요소에 매우 쉽게 첨부되어 있는지 테스트 할 수 있습니다. '클릭'이 올바른 처리기이며 올바른 요소에 첨부했는지 테스트 할 수 없다고 생각합니다.
Sean McMillan

5

테스트 알고리즘. GUI와 밀접하게 관련된 부분은 특정 브라우저에 더 의존하므로 셀레늄과 같은 유틸리티를 사용하여 테스트해야합니다.

물론 코드에는 격리 된 코드 조각으로 알고리즘이 포함되어 있어야합니다. 그렇지 않으면 단위 테스트가 거의 불가능합니다.

jquery 플러그인 인 btw는 단위 테스트가 쉽지 않습니다.


모든 좋은 포인트! 나는 그들이 작성된 방법에 따라 쉽게 단위 테스트 할 수 없다는 것에 동의합니다.
Nathan Hoad

-1

예전에는 Java를 다루었 고 단위 테스트에서 Java가 더 엄격하기 때문에 단위 테스트 JavaScript보다 Java가 더 쉽습니다.

테스트 중심 개발이 가장 좋습니다. JavaScript를 단위 테스트하는 방법도 탐색하고 있습니다. Java에서는 데이터베이스, 데이터 액세스 객체에 연결하는 코드를 모방했으며 DOM을 변경하는 JavaScript 코드와 AJAX를 서버로 호출하는 코드와 비교했습니다.

내가 얻는 것은 테스트해야 할 것이 명시 적으로 논리 인 것 같습니다. 예를 들어 (a) 서버가 실행 중이어야하고 (b) 속도가 느리고 단위 테스트 지침 중 하나가 서버 테스트를 수행해야하기 때문에 단위 테스트를 실행할 때 AJAX 호출을 원하지 않습니다. 개발자가 매분처럼 실행하는 것을 피할 수 있도록 매우 빠릅니다.

또 다른 지침은 지속적인 통합 프로세스가 실패한 단위 테스트를 발견했다는 전자 메일을 보내는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.