2012-08-05 5 views
5

zombie.js 테스트 프레임 워크 및 Google Maps API에 문제가 있습니다.zombie.js 및 Google Maps API

간단한 zombie.js로 홈페이지를로드하고 로그인 링크를 클릭하려고합니다. 내가합니다 (zombie.js 브라우저 객체의 관점에서) 홈 페이지 HTML 다시 오는 것을 볼 때, 나는 몸 부분 만이 참조 :

<body> 
    <script src="https://maps.gstatic.com/intl/en_us/mapfiles/api-3/9/12/main.js"  type="text/javascript"></script> 
</body> 

내가 Google지도 자바 스크립트를 제거하는 경우 원본 페이지에서 모든 것이 잘 작동하고 전체 섹션을 가져옵니다. 지도 API를 사용하지 않는 다른 페이지를 요청하면 정상적으로 작동합니다.

나는 여기에 관련 질문을 볼 수 있지만 해결 방법은 완전히 설명되지 않은 : https://github.com/assaf/zombie/issues/250

사람이에 대한 전체 해결 방법으로 나를 도와 드릴까요? 당신은 비동기 API를로드 할 필요 -

suite('Zombie Sign In', function() { 

    test('Home page should have sign-in link', function(done) { 
     var browser = new Browser(); 
     browser.debug = true; 
     browser.authenticate().basic(conf.basicAuth.username, conf.basicAuth.password); 
     browser.visit(conf.baseURL, function(e, browser) { 
      console.log(browser.html()); // here is where I get the empty body section 
      browser.clickLink("Sign In", function() { 
       browser.text("title").should.eql('my title'); 
       done();    
      }); 
     }); 
    }); 
}); 

답변

3

오늘이 문제에 달렸다 : 여기

문제의 zombie.js 코드입니다. 이를 위해

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&sensor=SET_TO_TRUE_OR_FALSE" type="text/javascript"></script> 
<script type="text/javascript"> 
    function initialize() { 
    var map = new google.maps.Map(/* ... */); 
    } 

    window.onload = initialize(); 
</script> 

:

https://developers.google.com/maps/documentation/javascript/tutorial#asynch

은 기본적으로 그냥 같은 코드를 변경해야합니다 : 이것은 당신이 여기에 읽을 수있는 문서화 된 대안으로 너무 많은 해결되지 않습니다 (위의 링크에서 거의 완전히 해제) :

<script type="text/javascript"> 
    function initialize() { 
    var map = new google.maps.Map(/* ... */); 
    } 

    function loadScript() { 
    var script = document.createElement("script"); 
    script.type = "text/javascript"; 
    script.src = "http://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&sensor=TRUE_OR_FALSE&callback=initialize"; 
    document.body.appendChild(script); 
    } 

    window.onload = loadScript; 
</script> 

여기서 주목해야 할 중요한 것은 당신이 콜백을 통과해야한다는 것입니다 매개 변수 (이 예제에서는 으로 초기화합니다. 원하는대로 지정할 수 있습니다.) 동적으로 삽입 된 스크립트 스크립트 태그가로드되면 google이 초기화 코드를 실행합니다.

이 두 번째 메커니즘은 좀비 테스트를 수정합니다.