5

我遇到了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>

如果我从原始页面中删除 Google Maps 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();            
            });
        });
    });
});
4

1 回答 1

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 标记(在此示例中,我们提供了initialize,但它可以是您想要的任何东西) - 这将让谷歌在动态注入时触发您的初始化代码地图脚本标签已完成加载。

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

于 2012-10-16T06:29:51.010 回答