6

ジャスミン フレームワークを使用して、Google マップの Javascript テストを作成しようとしています。私がやろうとしているのは、マップを開始して境界を変更し (ズームアウト)、マップが正しくズームアウトされたことをテストすることです。

私が遭遇している問題は、ジャスミンがイベントを処理する方法がないように見えることです。Jasmine には、spyOn()(イベントではなく) メソッドの使用法を探すメソッドがあります。waits()ジャスミンには、特定の時間待機するメソッドもあります。これらのメソッドはどれも、イベントを操作するためのスポットではありません。ジャスミンでのイベントの経験がある人はいますか?

私が使用しているコード:

describe('Map view', function () {
    beforeEach(function () {
        $('body').append("<div data-role='page' id='page-map'><div id='map_canvas'></div></div>");

        this.view = new MapView({el: $('#map_canvas')});
    });

    afterEach(function () {
        $('body div#page-map').remove();
    });

    describe('zoom to a new bound in the map', function () {
        it('should set map bounds correctly', function () {
            this.view.zoomToBounds(this.fixtures.Locations.valid.bounds);
    
            google.maps.event.addListener(this.view.map, 'bounds_changed', function() {
                // expect() doesn't work in this context.. (ex: expect(5).toEqual(1) will pass)
                expect(this.getBounds().getSouthWest().lat()).toBeGreaterThan(self.fixtures.Locations.valid.bounds.minLat);
                expect(this.getBounds().getSouthWest().lng()).toBeGreaterThan(self.fixtures.Locations.valid.bounds.minLng);
                expect(this.getBounds().getNorthEast().lat()).toBeLessThan(self.fixtures.Locations.valid.bounds.maxLat);
                expect(this.getBounds().getNorthEast().lng()).toBeLessThan(self.fixtures.Locations.valid.bounds.maxLng);
            });
        });
    });
});

バックボーン ビューが開始され、Google マップがレンダリングされます。このzoomToBounds方法は問題なく動作しますが、結果を確認したいときに問題が発生します。google.maps.event.addListener()節内では、(jasmine)expect()呼び出しが機能していないようです。

もちろん、これを行う最善の方法は、ジャスミン メソッドを使用してイベントを直接キャッチすることですが、これを行う方法がわかりません。

ここに誰もこれを処理する方法について何か考えがありますか?

4

1 に答える 1

1

もちろん、これを行う最善の方法は、ジャスミン メソッドを使用してイベントを直接キャッチすることです。

jasmine スパイを使用して、イベントがバインドされているオブジェクトのプロトタイプをスパイしようとしましたか? スパイがセットアップされる前に、イベントがバインドされる可能性があると思います。

これは簡単な例です(coffeescriptで)

  it 'calls render when a model is added to the collection', ->
    spyOn(MyView.prototype, 'render')
    view = new MyView({
      collection : new Backbone.Collection([])
    })
    view.collection.add({})
    expect(view.render).toHaveBeenCalled()
于 2012-12-21T18:38:43.343 に答える