6

我正在尝试使用 jasmine 框架为 Google Maps 编写 Javascript 测试。我要做的是启动地图并更改边界(缩小)并测试地图是否正确缩小。

我遇到的问题是 jasmine 似乎没有任何方法来处理事件。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()调用似乎不起作用。

做到这一点的最好方法当然是使用 jasmine 方法直接捕获事件,但我还没有想出一个方法来做到这一点。

这里有人知道如何处理这个问题吗?

4

1 回答 1

1

最好的方法当然是使用 jasmine 方法直接捕捉事件

您是否尝试过使用 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 回答