2014-03-03 3 views
1

나는 캐스퍼 테스터 모듈을 사용하고, 나는이 구조를 가지고 :CasperJS에서 언제 test.done()을 호출해야합니까?

casper.start(); 

...(various then() and wait() calls) 

casper.then(function(){ 
    test.done(); 
    }); 
casper.run(); 

그런 식으로 (나는 문제를 해결하기 위해 노력했습니다 간헐적 타이머 문제를 제외하고) 잘 작동 것처럼 그 일을. 나는 기본적으로 같은 생각했던 shown in the casper docs입니다 다음, 어느 위를 변경하는 경우

는 :

casper.start(); 

...(various then() and wait() calls) 

casper.run(function(){ 
    test.done(); 
    }); 

후 내가 얻을 "당신이 어떤 테스트를 실행하지 않은 것 같은데을 경고한다.". 내가 아직 assert() 전화가 없었기 때문에 그것이 실현되었습니다! 나는 무언의 주장을 추가하고 경고가 사라졌으며, 이제는 얼마나 많은 테스트가 실행되는지에 대한 보고서를 받기 시작한다. (간헐적 인 타이머 문제가 남아있어서 다른 것이 틀림 없다.)

내가 두 번째 방법으로 해왔어야한다는 것과 분명히 차이점이 있습니다.

누군가가 차이점을 설명 할 수 있습니까? 왜 첫 번째 제대로 작동하지 않았습니까? CasperJS 테스트가 어떻게 작동하는지 더 깊이 이해하게되기를 바랍니다.

+0

안녕하세요, 당신이 어떤 해결책을 찾았나요? 나는 똑같은 문제가있다. 고맙습니다. – DzeryCZ

+0

@DzeryCZ 내 질문의 후반부가 해결책이라고 생각합니다. 즉, test.done()은 run() 함수에서 수행되어야하며, * 및 *는 적어도 하나의 어설 션을 정의해야합니다. 아직도 이해할 수없는 것은 중요한 이유입니다. –

+0

해결책에 감사드립니다. 이유는 그 콜백이 호출 된 순서와 관련이 있다고 생각합니다. 주어진 콜백이 실행되기 전에 casper.run이 끝날 때 모든 웹 페이지를 닫는 등의 정리 작업이있을 것입니다. 그렇지 않으면 순서가 잘못되어 호출됩니다. . – encrest

답변

0

귀하 (done()에 대한 호출을 포함하는) 마지막 then() 매우이 done()가 호출 될 때 완료되지 - 그것은 여전히 ​​호출하는 또 하나 개의 기능이 있습니다.

한편, run() 함수는 모든 이전 단계가 완전히 끝났을 때 콜백을 실행합니다. 문서에서 '다른 모든 단계가 실행되었을 때 수행 할 맞춤 최종 단계로 고려할 수 있습니다.'

done()은 아마도 최종 then의 마지막 단계이므로 대부분의 경우 차이가 없어야합니다. 일 수 있습니다. 예를 들어 done에서 모든 단계가 완료되었는지 확인한 경우입니다.

출처 : http://casperjs.readthedocs.org/en/latest/modules/casper.html#run

관련 문제