2012-08-05 25 views
5

Mam problem ze strukturą testowania zombie.js i interfejsem API Map Google.zombie.js i Google Maps API

Mam prosty plik zombie.js, który ładuje stronę główną i próbuje kliknąć link Zaloguj się. Jednak kiedy patrzę na to, co wraca do HTML strony startowej (z punktu widzenia przedmiotu zombie.js przeglądarki), to widzę tylko w części ciała:

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

Jeśli usunąć skrypt Google Maps z oryginalnej strony wszystko działa dobrze i otrzymuję pełną sekcję. Żądanie innej strony, która nie korzysta z API map, również działa dobrze.

widzę powiązane pytanie tutaj, ale rozwiązanie nie jest w pełni opisany: https://github.com/assaf/zombie/issues/250

Czy ktoś może mi pomóc z pełnym obejście tego?

Oto kod zombie.js w pytaniu:

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

Odpowiedz

3

wpadłem na ten problem już dziś - wystarczy załadować API asynchronicznie. To nie jest tak dużo obejście jako udokumentowaną alternatywa, który można przeczytać tutaj:

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

Zasadniczo wystarczy zmienić dowolny kod tak:

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

Do tego (podniósł się prawie wyłącznie z linku powyżej):

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

Kluczową rzeczą, aby pamiętać, jest to, że trzeba zdać zwrotnego parametr znacznika script.src (w tym przykładzie zapewniamy zainicjować, ale może być to, co chcesz) - to pozwoli Google'owi wywołać twój kod inicjalizacyjny po zakończeniu ładowania dynamicznie wstrzykiwanego znacznika skryptu map.

Ten drugi mechanizm naprawia moje testy Zombie.