我正在尝试使用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方法直接捕获事件,但是我还没有找到这样做的方法。
有人知道怎么处理吗?
1条答案
按热度按时间6ie5vjzr1#
最好的方法当然是使用jasmine方法直接捕获事件
您是否尝试过使用jasmine spies来监视绑定了事件的对象的原型?我认为您的事件可能在设置spies之前就已绑定:
下面是一个简单的示例(在coffeescript中)