2012-08-24 2 views
15

Ajax 요청을 사용하여 서버의 데이터를 지속적으로 폴링하는 웹 애플리케이션이 있습니다. zombie.js을 사용하여 통합 테스트를 구현하고 싶습니다.zombie.js에서 browser.wait()를 사용하는 방법?

내가하려는 것은 Ajax 폴링 루프가 서버로부터 데이터를 수신 할 때까지 기다리는 것이다. 데이터는 20 초 후에 수신되어야합니다. 따라서 browser.wait(done, callback)을 사용하여 데이터가 있는지 확인하고 waitFor을 최대 시간 초과 1 분으로 설정하십시오.

그러나 done 콜백이 false를 반환하더라도 항상 browser.wait()이 거의 즉시 반환됩니다. zombie API documentation에서

, 내가 읽은 다음에 대한 browser.wait() :

... 그것은 특히하지 반복적으로 (예를 들어, 확인 페이지 상태, 롱 폴링)을 발광 할 수 있습니다 타이머를 들면, 영원히 기다릴 수 없습니다.

나는 그것이 내가하는 행동의 이유라고 생각하지만, 실제로 어떤 일이 일어나는지 이해하지 못합니다. 폴링 루프가 서버에서 데이터를 수신 할 때까지 1 분 동안 기다릴 수없는 이유는 무엇입니까? browser.wait() 반복적으로 발사 할 수있는 타이머를 기다릴 수없는 이유는 무엇입니까? 테스트를 이행하기 위해해야 ​​할 일은 무엇입니까?

+0

새로운 기능이 있습니까? –

+0

단지'waitFor'에 밀리 초를 사용하고있는 것입니다. 맞습니까? 나는 경험에 대해 이야기한다.) 또한, 'maxWait'을 잊지 마라. – robertklep

+0

"서버에서 데이터를 지속적으로 폴링합니다"-이 문제를 제어 할 수 있다면'socket.io'가 훌륭한 대안이 될 것입니다 – jcollum

답변

2

Zombie.js는 기본적으로 페이지의 모든 스크립트가로드되어 문서 준비가되기를 기다리는 동안 실행될 때까지 기다립니다.

정확하게 이해하면 20 초 동안 문서를 준비한 후에도 스크립트가 실행되지 않습니다. 이 경우 Zombie에는 브라우저 컨텍스트에서 자바 스크립트를 평가할 수있는 함수가 있으므로 타이머에있는 경우 Ajax 코드를 더 빨리 시작할 수 있으며 기다릴 필요가 없습니다. browser.evaluate(expr)

또 다른 옵션에서

봐 단순히 20 초 기다린 다음, 당신이 기대하는 변화에 대한 DOM보고 정상적인 자바 스크립트 타임 아웃을 사용하는 것입니다.

setTimeout(function(){ 
    browser.document.query("#interestingElement") 
}, 20*1000); 
+0

그냥 참고 사항 : 좀비가 실제로 모든 스크립트가 완료 될 때까지 기다렸다면 정말 좋았을 것입니다. 페이지가로드되었지만 http://stackoverflow.com/questions/37482891/php-mink-zombie-handling-hanging-processes-after-a-fatal-exception에서 볼 수있는 한 반드시 그런 것은 아닙니다. 불행히도 모든 웹 사이트에 대해 ... – sdbbs

관련 문제