2013-01-16 3 views
1

JavaScript 함수의 출력을 수동으로 (콘솔의 각 함수의 출력을 보는 것만으로) 테스트하는 경우가 종종 있습니다. JavaScript에서는 일련의 함수 호출 결과를 자동으로 테스트하고 예상되는 결과를 생성하지 않은 모든 테스트를 반환하는 방법이 있습니까?JavaScript 함수의 출력을 자동으로 테스트하기

checkOutput([["add(1, 2)", 3], ["add(2, 2)", 4]]); //if the input does not match the output in one of these arrays, then return the function call(s) that didn't produce the correct output 

function checkOutput(functionArray){ 
    //this function is not yet implemented, and should return a list of function calls that did not produce correct output (if there are any). 
} 

function add(num1, num2){ 
    return num1 + num2; 
} 

답변

2

각 루프의 첫 번째 요소 인 eval을 루프와 같이 단순하게 보이고 두 번째 요소와 비교합니다.

function checkOutput(functionArray) { 
    var check = function(e) { 
     return eval(e[0]) !== e[1]; 
    }; 
    if(Array.prototype.filter) 
     return functionArray.filter(check); 
    // shim in older browsers 
    var l = functionArray.length, i, out = []; 
    for(i=0; i<l; i++) 
     if(check(functionArray[i])) 
      out.push(functionArray[i]); 
    return out; 
} 
+0

이 줄에는 괄호가 없습니다 :'return eval (e [0])! == e [1]); ' –

+0

그 점을 지적 해 주셔서 감사합니다. 원래'if'로 작성 했었습니다. –

+0

다음은 JSFiddle에서이 함수를 테스트 한 것입니다. http://jsfiddle.net/jarble/xZ5uy/ –

2

물론입니다. 단위 테스트 제품군 (예 : QUnit)을 사용하십시오.

나는 그 중 하나를 특히 좋아하며 다양한 jQuery 프로젝트에서 사용되는 것을 자랑합니다. 그것은 꽤 단호한 승인입니다.

일반적인 테스트는 다음과 같이 보일 것

...

test("add test", function(num1, num2) { 
    ok(num1 + num2 == 42, "Passed!"); 
}); 

그리고, 당신이 제안이 마음에 들지 않는다면, 좋은 똑똑한 '위키 백과에서 다른 단위 테스트 프레임 워크 체크 아웃 : JavaScript Unit Testing Frameworks합니다.

+0

언제든지 QUnit이 이와 같은 작업을 수행합니까? :) –

+0

예. 단위 테스팅 프레임 워크와 마찬가지로 어설 션을 생성하고 ('expected == 1' 등) 한 번에 결과를 얻습니다. –

1

아마도 자바 스크립트 테스트를 위해 jasmine으로 전환하고 싶을 수 있습니다.

0

QUnit을 살펴보십시오. 기본적으로 모든 기능을 한꺼번에 실행할 수 있습니다.

1

내 테스트 라이브러리 suite.js은 이와 유사합니다. 기본적으로 구문은 다음과 같습니다

suite(add, [ 
    [[1, 2]], 3 
]); 

보통 내가 그렇게 내 테스트는 다음과 같이 부분적인 응용 프로그램을 사용하여 매개 변수를 바인딩 :

suite(partial(add, 1), [ 
    -5, 4, 
    2, 3 
]); 

내가 모두 테스트를 건너 뛰고을 정의하는 궁극적 인 레벨로 이동 계약서를 바탕으로 테스트를 생성합니다. 이를 위해 annotate.js을 사용합니다. 이 경우 다음과 같이 끝낼 것입니다 :

// implementation 
function adder(a, b) { 
    return a + b; 
} 

var add = annotate('add', 'adds things').on(is.number, is.number, adder); 

// test some invariants now 
suite(add, function(op, a, b) { 
    return op(a, b) == op(b, a); 
}); 

나는 더 이상 사소한 코드가 아니라는 것을 알고 있습니다. 이를 통해 함수 매개 변수에 대한 불변 식을 정의 할 수 있습니다.이 정보를 바탕으로 테스트, 문서 등을 생성 할 수 있습니다.

suite.js는 현재 노드 환경에서만 작동하지만 관심이 충분하지 않으면 브라우저로 포팅하면 테스트를 실행할 수 있습니다.

관련 문제