2012-08-05 112 views
5

我遇到了zombie.js測試框架和Google Maps API的問題。zombie.js和Google Maps API

我有一個簡單的zombie.js加載主頁,並嘗試點擊登錄鏈接。然而,當我在看什麼回來的主頁HTML(從zombie.js瀏覽器對象的角度看),我只看到這個在主體部分:

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

如果我刪除谷歌地圖的JavaScript從原始頁面,一切正常,我得到完整的部分。請求不使用maps API的不同頁面也可以正常工作。

我在這裏看到一個相關的問題,但解決辦法是不全面的描述:https://github.com/assaf/zombie/issues/250

誰能幫助我的全力解決方法呢?

這裏是有問題的zombie.js代碼:

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

我今天就遇到了這個問題 - 你只需要異步加載該API。這與其說是一種解決方法作爲替代文件,你可以在這裏讀到:

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

基本上你只需要改變這樣的任何代碼:

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

對此(從鏈接取消幾乎全部以上):

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

這裏要注意的關鍵問題是,你必須通過回調參數指向script.src標記(在本例中,我們提供初始化,但它可以是任何你想要的) - 當動態注入的地圖腳本標記完成加載時,這將讓Google啓動初始化代碼。

這第二種機制修復了我的殭屍測試。