5

zombie.jsテストフレームワークとGoogleMapsAPIに問題があります。

ホームページをロードしてサインインリンクをクリックしようとする単純な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>

元のページからGoogleMapsjavascriptを削除すると、すべてが正常に機能し、セクション全体が表示されます。マップ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を提供していますが、任意の値にすることができます)-これにより、動的に挿入されたときにgoogleが初期化コードを起動できるようになりますマップスクリプトタグの読み込みが完了しました。

この2番目のメカニズムは、ゾンビテストを修正します。

于 2012-10-16T06:29:51.010 に答える