2009-11-16 3 views
0

자바 스크립트 파일에서 window.setInterval 함수를 테스트하는 데 어려움이 있습니다.문제 단위 테스트 자바에서 setInterval 함수

var dummy = false; // global variable not set anywhere else 
var INTERVAL_TIME = 20; // global variable not set anywhere else 
function myFunction() 
{ 
    var id = window.setInterval(function() { 
     if (...) 
     { 
      window.clearInterval(id); 
     } 
     else 
     { 
      if(...) 
      { 
       dummy = true; 
      } 
     } 
    }, INTERVAL_TIME); 
} 

그리고 JsTestDriver에 다음 테스트 코드가 있습니다 :

TestMyFunction.prototype.test_myFunction() { 
    myFunction(); 
    assertTrue(dummy); 
}  

매번 테스트가 실행을 아래 시나리오는 기본적으로 제가 테스트 할 기능에 setInterval을 기능을 가지고입니다 ... , 그것은 실패하고 dummy가 false라고 말합니다. 마치 전체 setInterval 함수가 호출되지 않은 것처럼 말입니다. 나는 아무런 성공도없이 그 간격으로 놀아 보려고 노력했다. else 절에 경고를두면 잠시 후에 나타 났으며 사라졌습니다 (테스트는 여전히 실패합니다).

코드가 작동합니다. 필자는 타이밍 문제라고 생각합니다. 테스트가 setInterval 함수보다 먼저 완료되어 더미가 true로 설정되지 않는다고 불평합니다. 이 문제에 대한 모든 제안/해결책?

감사합니다.

답변

1

setInterval 함수를 시뮬레이트하기 위해 JsUnitMockTimeout.js를 사용했습니다. 그것은 보석처럼 작동했습니다.

+0

작업 코드를 어떻게 사용하고 있습니까? –

0

assertTrue(dummy);은 20ms의 timeInterval 전에 실행됩니다. 간격을 사용하기 때문에 더미 값을 perdiodically 폴링합니까? 초 저속 PC가 없다면 처음으로 설문 조사를하면 false이 표시됩니다.

1

테스트에 setTimeout을 넣지 않는 이유는 25ms 이후까지 더미 값 확인을 지연시키는 것입니다.

0

"JsTestDriver cannot perform asynchronous testing"이 나타납니다. 비동기 지원에서 사용한 JS 단위 테스트 프레임 워크는 Qunit뿐입니다.

Qunit에는 ajax 또는 시간 초과와 함께 작동하는 asyncTest이 있습니다.

추신 : 새로운 JS 테스트 프레임 워크 Evidence이 있습니다. 나는 그것을 시도하지 않았다.