backbone.js 如何在jasmine测试框架中处理google maps事件

r1zhe5dt  于 2022-11-10  发布在  Go
关注(0)|答案(1)|浏览(131)

我正在尝试使用Jasmine框架为Google Maps编写Javascript测试。我正在尝试做的是初始化Map并更改边界(缩小),并测试Map是否被正确缩小。
我遇到的问题是,jasmine似乎没有任何处理事件的方法。Jasmine有spyOn()方法,它查找方法(而不是事件)的用法。jasmine中还有waits()方法,它等待特定的时间。这些方法中没有一个是处理事件的正确方法。有人在jasmine中有处理事件的经验吗?
我正在使用的代码:

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

Backbone.js 视图将启动,GoogleMap将呈现。zoomToBounds方法工作正常,但当我想检查结果时,我遇到了一些问题。在google.maps.event.addListener()子句中,(jasmine)expect()调用似乎不起作用。
最好的方法当然是使用jasmine方法直接捕获事件,但是我还没有找到这样做的方法。
有人知道怎么处理吗?

6ie5vjzr

6ie5vjzr1#

最好的方法当然是使用jasmine方法直接捕获事件
您是否尝试过使用jasmine spies来监视绑定了事件的对象的原型?我认为您的事件可能在设置spies之前就已绑定:
下面是一个简单的示例(在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()

相关问题