代码之家  ›  专栏  ›  技术社区  ›  Steve P

zombie.js和谷歌地图API

  •  5
  • Steve P  · 技术社区  · 13 年前

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

    如果我从原始页面中删除谷歌地图javascript,一切都很好,我得到了完整的部分。请求不使用映射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();            
                });
            });
        });
    });
    
    1 回复  |  直到 13 年前
        1
  •  3
  •   Nick Payne    12 年前

    我今天遇到了这个问题,您只需要异步加载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标记的参数(在本例中,我们提供 初始化 ,但它可以是任何你想要的)-这将允许谷歌在动态注入的maps脚本标记完成加载时启动你的初始化代码。

    第二个机制修复了我的僵尸测试。

    推荐文章