zombie.js和Google Maps API

我遇到了zombie.jstesting框架和Google Maps API的问题。

我有一个简单的zombie.js加载主页,并尝试点击login链接。 但是,当我查看返回的主页HTML(从zombie.js浏览器对象的angular度来看),我只在主体部分看到这一点:

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

我今天遇到了这个问题 – 你只需要asynchronous加载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> 

这里要注意的关键是你必须传递一个callback参数给script.src标记(在这个例子中,我们提供初始化 ,但它可以是任何你想要的) – 这将让谷歌启动dynamic注入时的初始化代码地图脚本标记已完成加载。

这第二个机制修复了我的僵尸testing。