문제

지속적인 통합 시스템에서 WebApp 빌드 플랜이 실행 중입니다 (아틀라 시안 대나무 2.5). 통합해야합니다 Qunit-기반 JavaScript 단위 테스트는 빌드 계획으로 테스트하여 각 빌드에서 JavaScript 테스트가 실행되고 대나무가 테스트 결과를 해석 할 수 있도록합니다.

바람직하게는 외부 서버에 대한 연결이 필요하지 않도록 빌드 프로세스를 "독립형"으로 만들고 싶습니다. 이것을 달성하는 방법에 대한 좋은 아이디어? 빌드 프로세스를 실행하는 CI 시스템은 Ubuntu Linux 서버에 있습니다.

도움이 되었습니까?

해결책

솔루션을 직접 만들었을 때, 나는 그것을 공유하는 것이 좋은 생각이라고 생각했습니다. 접근 방식은 완벽하지는 않지만 작동하는 첫 번째 접근 방식입니다. 개선 및 제안을 게시하십시오.

내가 간단히 말해서 한 일 :

  • 인스턴스를 시작하십시오 XVFB, 가상 프레임 버퍼
  • 사용 Jstestdriver:
    • Firefox 인스턴스를 가상 프레임 버퍼로 시작
    • 캡처 Firefox 인스턴스 및 테스트 스위트를 실행하십시오
    • 주니트 호환 테스트 결과 .xml을 생성합니다
  • 대나무를 사용하여 결과 파일을 검사하거나 빌드를 전달하거나 실패합니다.

다음으로 더 자세한 단계를 살펴 보겠습니다. 이것이 내 디렉토리 구조가 어떻게 생겼는지 다음과 같습니다.

lib/
    JsTestDriver.jar
test/
    qunit/
            equiv.js
            QUnitAdapter.js
    jsTestDriver.conf
    run_js_tests.sh
    tests.js
test-reports/
build.xml

빌드 서버에서 :

  • XVFB 설치 (apt-get install Xvfb)
  • Firefox 설치 (apt-get install firefox)

구축 할 응용 프로그램에 :

server: http://localhost:4224

load:
# Load QUnit adapters (may be omitted if QUnit is not used)
  - qunit/equiv.js
  - qunit/QUnitAdapter.js   

# Tests themselves (you'll want to add more files)
  - tests.js

장치 테스트를 실행하고 테스트 결과를 생성하기위한 스크립트 파일을 만듭니다 (Bash의 예제, 예제, run_js_tests.sh):

#!/bin/bash
# directory to write output XML (if this doesn't exist, the results will not be generated!)
OUTPUT_DIR="../test-reports"
mkdir $OUTPUT_DIR

XVFB=`which Xvfb`
if [ "$?" -eq 1 ];
then
    echo "Xvfb not found."
    exit 1
fi

FIREFOX=`which firefox`
if [ "$?" -eq 1 ];
then
    echo "Firefox not found."
    exit 1
fi

$XVFB :99 -ac &    # launch virtual framebuffer into the background
PID_XVFB="$!"      # take the process ID
export DISPLAY=:99 # set display to use that of the xvfb

# run the tests
java -jar ../lib/JsTestDriver.jar --config jsTestDriver.conf --port 4224 --browser $FIREFOX --tests all --testOutput $OUTPUT_DIR

kill $PID_XVFB     # shut down xvfb (firefox will shut down cleanly by JsTestDriver)
echo "Done."

스크립트를 호출하는 개미 대상을 만듭니다.

<target name="test">        
    <exec executable="cmd" osfamily="windows">
        <!-- This might contain something different in a Windows environment -->
    </exec>

    <exec executable="/bin/bash" dir="test" osfamily="unix">
        <arg value="run_js_tests.sh" />
    </exec>
</target>   

마지막으로, 대나무 빌드 계획에 둘 다 test 주니트 테스트 결과를 목표로하고 찾으십시오. 여기 기본값 "**/test-reports/*.xml" 잘 할 것입니다.

다른 팁

Maven에서 자신의 Jasmine BDD 사양을 헤드리스로 실행하는 데 관심이있는 사람이라면 I Maven I에 관심이있을 수 있습니다.

http://github.com/searls/jasmine-maven-plugin

대안으로 TestSwarm을 시도 할 수도 있습니다. Qunit을 사용하여 JS 테스트를 실행하여 실행했습니다.

나는 지난 1 년 동안 많은 솔루션을 가지고 놀았지만 Karma (이전의 시험) 야구장에서 아무것도 찾지 못했습니다. 시도 해봐

http://karma-runner.github.com/

헤드리스 브라우저 인 Rhino를 사용하여 CI 컴퓨터에서 장치 테스트를 실행할 수 있습니다. 물론, 여기서 단점은 브라우저 X에만 해당되는 버그를 찾지 못하지만 CI 박스에 2-3 개의 OS를 설치하여 모든 기본 플랫폼을 다루기 위해 이길 수 있다는 것입니다.

그러나 그렇습니다. 이런 종류의 짜증이 나지만 CI 시나리오에서 충분히 잘 작동 할 수 있습니다.

나는 Maven과 Junit을 사용하여 Rhino에게 전화했습니다. 우아하지는 않지만 기본 서비스 및 유틸리티 코드를 테스트하는 데 사용합니다.

Java 라이브러리와 함께 XHR과 같은 지원되지 않는 클래스를 조롱해야합니다.

나는 그것이 JavaScript (테스트 등)의 모든 것을 최고의 코드라는 것을 알았으며 빌드 조직에 Junit 만 사용하고 CI에 대한 훅 만 사용합니다.

jstestdriver가 할 수 있는지 확인하고 싶습니다. 또는 주니트 리포터와의 모카.

JS 테스트 러너 꽤 좋은 해결책입니다. Phantomjs와 Qunit을 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top