문제

나를 통합하기 위해 노력하고 일부 자바 스크립트 단위 테스트용으로 자동화된 프로세스를 구축 합니다.현재 JSUnit 잘 JUnit 지만,그것은 있을 것 같 밴던 부족 좋은 지원을 위한 AJAX,디버깅,그리고 시간이 초과되었습니다.

는 사람이었다 모든 행운을 자동화(ANT)단위 테스트 라이브러리 등 유이 테스트,JQuery 의 qunit 을,또는 jQUnit(http://code.google.com/p/jqunit/)?

참고:내가 사용하는 사용자 정의 AJAX 라이브러리,그래서 문제와 도장의 DOH 필요하다는 것이다 당신이 자신을 사용하 AJAX 기능이 통화하고 이벤트를 처리기와 함께 작동 AJAX 단위 테스트입니다.

도움이 되었습니까?

해결책

많은 자바스크립트 단위 테스트 프레임 워크를 기반으로(jsUnit,scriptaculous,...)하지만 jsUnit 은 내가 알고 있는 유일한 사람과 함께 사용할 수 있는 자동화를 구축.

을 하는 경우'true'유닛 테스트는 필요하지 않습니다 AJAX 를 지원합니다.예를 들어,사용하는 경우 RPC ajax 프레임워크 등의 DWR,쉽게 작성할 수 있는 모의 기능:

   function mockFunction(someArg, callback) {
      var result = ...; // some treatments   
      setTimeout(
function() { callback(result); }, 300 // some fake latency
); }

그리고 예,JsUnit 지 처리 시간 제한: 시뮬레이션은 시간에 jsUnit 테스트

다른 팁

나는 그냥에 대한 일을 시작 Javascript TDD 새 프로젝트에 나가에 노력하고 있습니다.현재는 계획을 사용하는 것입 qunit 을 을 수행 단위 테스트입니다.을 개발하면서 테스트를 실행할 수 있으로 단순히 상쾌한 있는 테스트 페이지에서는 브라우저입니다.

(연속 통합 보장 테스트에서 실행한 모든 브라우저),내가 사용하는 것입 셀레늄 을 자동으로 로드하 테스트 환경에서 각 브라우저 읽 결과입니다.이러한 테스트에서 실행됩니다 모든 체크인 소스를 제어합니다.

나도를 사용하려 JSCoverage 코드 범위의 분석 테스트합니다.이것은 또한 자동으로 셀레늄이 함유되어 있습니다.

나는 현재의 중간에 설정이다.나는데 이 대답으로 더 많은 정확한 정보면 나는 설정을 망치다.


테스트 도구:

Im 큰 팬의 js-테스트-드라이버

그것은에서 잘 작동합 CI 환경을 캡처 할 수 있는 실제 브라우저를 위한 크로스 브라우저를 테스트합니다.

나는 최근에 기사를 읽으로 브루노를 사용하여 JsUnit 성 JsMock framework 의 상단에는...매우 흥미 롭습니다.나의 생각을 사용하여 자신의 작업을 시작 단위 테스트 내 Javascript 코드입니다.

모의 자바스크립트나 어떻게 유닛 테스트 Javascript 브라우저 외부에서 환경

나는 그냥 어는 허드슨 CI 실행 JasmineBDD (머리),적어도에 대한 순수 자바 스크립트 단위 테스트입니다.

(실행하는 허드슨 Java 을 통해 shell,실행 Envjs,실행 JasmineBDD.)

난 그것은 좋은 플레이와 함께 큰 라이브러리는 아직하지만,다음과 같 프로토 타입입니다.

YUITest

나는 계약에는 jsunit 은 죽음의 종류에 포도합니다.우리는 단지 완성되는 업체로 유이 테스트입니다.

비슷한 qunit 을 사용하여 예를 들어,우리는 실행하는 테스트를 사용하여 셀레늄이 함유되어 있습니다.우리는 실행하는 이 시험에서 독립적으로 우리의 기타 셀렌 테스트 단순히 가지고 있지 않기 때문에 의존성 정상적인 UI 회귀분 테스트(예를 들어,배포 응용 프로그램을 server).

밖으로 시작하는,우리는 기초 자바 스크립트 파일에 포함되는 우리의 모든 테스트 html 파일을.이 핸들을 설정하는 유이 인스턴스,테스트 러너,YUI.테스트입니다.Suite 개체뿐만 아니라 테스트합니다.경우입니다.그것은 방법에 액세스 할 수있는을 통해 셀레늄을 실행하는 테스트를 확인해 보면 테스트를 주는 것은 아직도 실행하(결과하기 전까지는 사용되지 않는 한),와 시험 결과를 얻을 수 있습니다(우리가 선택한 형식 JSON)

var yui_instance; //the YUI instance
var runner;  //The YAHOO.Test.Runner
var Assert; //an instance of YAHOO.Test.Assert to save coding
var testSuite; //The YAHOO.Test.Suite that will get run.

/**
 * Sets the required value for the name property on the given template, creates
 * and returns a new YUI Test.Case object.
 * 
 * @param template the template object containing all of the tests
 */
function setupTestCase(template) {
    template.name = "jsTestCase";
    var test_case = new yui_instance.Test.Case(template);
    return test_case;
}

/**
 * Sets up the test suite with a single test case using the given 
 * template.
 * 
 * @param template the template object containing all of the tests
 */
function setupTestSuite(template) {
    var test_case = setupTestCase(template);
    testSuite = new yui_instance.Test.Suite("Bond JS Test Suite");
    testSuite.add(test_case);
}

/**
 * Runs the YAHOO.Test.Suite
 */
function runTestSuite() {
    runner = yui_instance.Test.Runner;
    Assert = yui_instance.Assert;

    runner.clear();
    runner.add(testSuite);
    runner.run();
}

/**
 * Used to see if the YAHOO.Test.Runner is still running.  The
 * test results are not available until it is done running.
 */
function isRunning() {
    return runner.isRunning();
}

/**
 * Gets the results from the YAHOO.Test.Runner
 */
function getTestResults() {
    return runner.getResults(yui_instance.Test.Format.JSON);
}

로 셀레늄 측면의 것,우리가 사용한 매개 변수가 있는 테스트입니다.우리는 우리의 테스트는 IE,FireFox 데이터에서는 방법,구문 분석하는 테스트 결과 목록으로의 개체 배열을 가진 각 배열을 포함하는 브라우저 이름,테스트 파일 이름,테스트 이름,결과(전달,실패 또는 무시)및 메시지입니다.

실제 시험을 주장한 테스트 결과입니다.는 경우 그것은 동일하지 않은"통과"그때 실패한 테스트와 메시지가 반환에서 유일 테스트 결과입니다.

    @Parameters
public static List<Object[]> data() throws Exception {
    yui_test_codebase = "file:///c://myapppath/yui/tests";

    List<Object[]> testResults = new ArrayList<Object[]>();

    pageNames = new ArrayList<String>();
    pageNames.add("yuiTest1.html");
    pageNames.add("yuiTest2.html");

    testResults.addAll(runJSTestsInBrowser(IE_NOPROXY));
    testResults.addAll(runJSTestsInBrowser(FIREFOX));
    return testResults;
}

/**
 * Creates a selenium instance for the given browser, and runs each
 * YUI Test page.
 * 
 * @param aBrowser
 * @return
 */
private static List<Object[]> runJSTestsInBrowser(Browser aBrowser) {
    String yui_test_codebase = "file:///c://myapppath/yui/tests/";
    String browser_bot = "this.browserbot.getCurrentWindow()"
    List<Object[]> testResults = new ArrayList<Object[]>();
    selenium = new DefaultSelenium(APPLICATION_SERVER, REMOTE_CONTROL_PORT, aBrowser.getCommand(), yui_test_codebase);
    try {
        selenium.start();

        /*
         * Run the test here
         */
        for (String page_name : pageNames) {
            selenium.open(yui_test_codebase + page_name);
            //Wait for the YAHOO instance to be available
            selenium.waitForCondition(browser_bot + ".yui_instance != undefined", "10000");
            selenium.getEval("dom=runYUITestSuite(" + browser_bot + ")");

            //Output from the tests is not available until 
            //the YAHOO.Test.Runner is done running the suite
            selenium.waitForCondition("!" + browser_bot + ".isRunning()", "10000");
            String output = selenium.getEval("dom=getYUITestResults(" + browser_bot + ")");

            JSONObject results = JSONObject.fromObject(output);
            JSONObject test_case = results.getJSONObject("jsTestCase");
            JSONArray testCasePropertyNames = test_case.names();
            Iterator itr = testCasePropertyNames.iterator();

            /*
             * From the output, build an array with the following:
             *  Test file
             *  Test name
             *  status (result)
             *  message
             */
            while(itr.hasNext()) {
                String name = (String)itr.next();
                if(name.startsWith("test")) {
                    JSONObject testResult = test_case.getJSONObject(name);
                    String test_name = testResult.getString("name");
                    String test_result = testResult.getString("result");
                    String test_message = testResult.getString("message");
                    Object[] testResultObject = {aBrowser.getCommand(), page_name, test_name, test_result, test_message};
                    testResults.add(testResultObject);
                }
            }

        }
    } finally {
        //if an exception is thrown, this will guarantee that the selenium instance
        //is shut down properly
        selenium.stop();
        selenium = null;
    }
    return testResults;
}
/**
 * Inspects each test result and fails if the testResult was not "pass"
 */
@Test
public void inspectTestResults() {
    if(!this.testResult.equalsIgnoreCase("pass")) {
        fail(String.format(MESSAGE_FORMAT, this.browser, this.pageName, this.testName, this.message));
    }
}

이 도움이 됩니다.

가하는 새로운 프로젝트를 실행할 수 있습니다 qunit 을 테스트 자바 환경(ant)할 수 있도록 완벽하게 통합하는 클라이언트 측 테스트와 다른 단위를 테스트합니다.

http://qunit-test-runner.googlecode.com

나는 그것을 사용해 단위 테스트 jQuery 인 objx 코드,OO 사용자 지정 자바 스크립트와 그것은 작품에 대한없이 모든 것을 수정할 수 있습니다.

프로젝트에서 일하고 있어요 사용 Js-테스트-드라이버 호스팅 재스민 크롬에서 10 Jasmine-JSTD-어댑터 을 포함하여 사용의 범위 코드 에 포함된 테스트 JS-테스트-드라이버입니다.는 동안 거기에 몇 가지 문제가 각각의 시간을 우리는 우리를 변경 또는 업데이트 브라우저에 환경 CI 자스민 테스트를 실행 예쁜 매끄럽게만 사소한 문제로 ansynchronous 테스트,하지만 마찬가지로 지금까지 내가 알고 있는 이러한 일될 수 있습니다 주위 사용하여 자스민 시계 하지만 난 할 수있는 기회가 없었어요 그들을 아직입니다.

나는 출판 작은 라이브러리 을 확인하는 브라우저에 따라 다릅 JavaScript 테스트를 사용하지 않는 브라우저입니다.그것은 node.js 모듈을 사용하는 zombie.js 을 로드하는 테스트 페이지에 검사 결과입니다.난 그것에 대해 썼 내 블로그.여기에 무엇을 자동화처럼 보인:

var browsertest = require('../browsertest.js').browsertest;

describe('browser tests', function () {

it('should properly report the result of a mocha test page', function (done) {
    browsertest({
        url: "file:///home/liam/work/browser-js-testing/tests.html",
        callback: function() { 
            done();
        }
    });
});

});

나는 당신의 질문에 다시 날짜 및 그런 다음 거기에 몇 가지 좋은 JS 테스트 lib/framework.오늘은 당신을 찾을 수 있습이 훨씬 더 많은 다른 초점은 다음과 같 TDD,BDD,Assetion 고없이/주자 지원합니다.

많은 선수가 이 게임에서 좋아 모카,차이,qunit 을,재스민,etc....일부를 찾을 수 있습니다 더 많은 정보에 에 대한 블로그 JS/Mobile/웹 테스트...

다른 JS 테스트할 수 있는 프레임워크와 함께 실행 Ant Crosscheck 에.가 실행의 예 crosscheck 에 통해 개미에서 파일 구축을 위해 프로젝트입니다.

Crosscheck 에 시도한 성공을 에뮬레이트를 포함하여 브라우저는 모의 스타일의 구현 XMLHttpRequest 및 제한시간/간격입니다.

지 않는 현재 로드 javascript 웹 페이지에서,하지만.당신은 지정 자바 스크립트 파일을 로드하려고 테스트합니다.을 유지하는 경우 모든 JS 에서 분리 HTML,그것은 당신을 위해 일할 수 있습니다.

내가 작성한 개미는 작업에 사용하는 팬텀 JS,머리없는 웹 브라우저를 실행하 qunit 을 html 테스트 파일 이내에 개미는 프로세스를 구축 합니다.그것은 또한 실패를 구축하는 경우 모든 테스트 실패합니다.

https://github.com/philmander/ant-jstestrunner

이것은 좋은 평가의 여러 가지 테스트 도구입니다.

JavaScript 단위 테스트를 위한 도구 TDD

나 개인적으로아보세요 https://code.google.com/p/js-test-driver/

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