2012-08-05 21 views
5

Ich habe ein Problem mit dem Framework zombie.js und der Google Maps API.zombie.js und Google Maps API

Ich habe eine einfache zombie.js, die eine Homepage lädt und versucht, auf einen Anmelden-Link zu klicken. Allerdings, wenn ich (aus der Perspektive des zombie.js Browser-Objekt) zu buchen, was für die Homepage HTML zurück kommt, sehe ich dies nur in dem Körperabschnitt:

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

Wenn ich die Google Maps Javascript entfernen Von der Originalseite funktioniert alles einwandfrei und ich bekomme den ganzen Abschnitt. Das Anfordern einer anderen Seite, die die Karten-API nicht verwendet, funktioniert ebenfalls einwandfrei.

Ich sehe eine ähnliche Frage hier, aber die Abhilfe nicht vollständig beschrieben ist: https://github.com/assaf/zombie/issues/250

mir jemand mit der vollen Abhilfe dazu helfen?

Hier ist der zombie.js Code in Frage:

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();    
      }); 
     }); 
    }); 
}); 

Antwort

3

ich heute in dieser Ausgabe lief - Sie müssen nur die API asynchron laden. Dies ist nicht so sehr ein Problem zu umgehen als Alternative dokumentiert, die Sie hier nachlesen können:

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

Im Wesentlichen müssen Sie einfach so beliebigen Code zu ändern:

<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> 

Um dies zu (hob fast vollständig aus dem Link oben):

<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> 

der Schlüssel ist hier zu beachten ist, dass Sie einen Rückruf passieren haben Parameter zum script.src-Tag (in diesem Beispiel stellen wir zur Verfügung initialisieren, aber es kann sein, was auch immer Sie wollen) - dies wird google Ihren Initialisierungscode auslösen lassen, wenn das dynamisch importierte Kartenskript-Tag geladen wurde.

Dieser zweite Mechanismus behebt meine Zombie-Tests.