Клуб API Карт

API Карт и QUnit

Пост в архиве.

Вопрос больше не про сами карты, а про тестирование сделанного

 

На карте нужно нарисовать квадрат для этого есть скрипт:

var rectCreator = {
    map: null,
    getSegmentLength: function() {
        var getLength = function(direction){
            if (direction != 0 && direction != 1) {
                direction = 0;
            }
            var mapSize = HouseCreator.map.getBounds();
            var length = (mapSize[1][direction] - mapSize[0][direction]) / 4;
            if (length < 0) {
                length = -1 * length;
            }
            return length;
        };
        var segment = getLength(0);
        var _segment = getLength(1);
        if (segment > _segment) {
            segment = _segment;
        }
        return segment;
    },
    createMap: function(city, container, callback) {
        ymaps.geocode(city).then(function(result){
            var coordinates = result.geoObjects.get(0).geometry.getCoordinates();
            HouseCreator.map = new ymaps.Map (container, {
                center: coordinates,
                zoom: 9
            });
            callback();
        });
    },
    createRectangle: function() {
        var segmentLength = HouseCreator.getSegmentLength();
        var center = HouseCreator.map.getCenter();
        var rect = new ymaps.Rectangle([
            [center[0] - segmentLength / 2, center[1] - segmentLength], 
            [center[0] + segmentLength / 2, center[1] + segmentLength]
        ], {}, {});
        HouseCreator.map.geoObjects.add(rect);
    },
};

 

Скрипт работает верно, но как его протестировать?

Пытаюсь так

 

window.onload = function () {   
    var creator = rectCreator;
    asyncTest(creator.createMap('Москва', 'map', creator.createRectange), function(){
        var map = document.getElementById('map');
        
        ok(map, 'Document has container');
        ok(map.getElementsByTagName('ymaps'), 'Container has map');
        equal(creator.map.getCenter(), [55.7536759999937, 37.61989899999996]);
    });
};

Первые два теста проходят, но в третьем в creator.map все еще null.

В связи с этим вопрос у меня такой: как протестировать данный код и вообще как правильно такие вещи тестировать?

2 комментария

Ваш фреймворк для тестирования должен поддерживать асинхронные вызовы.

т.е. провайдить callback который вы будете вызывать когда будет получен результат от геокодера и создан ваш квадрат.

 

Спасибо за ответ.

QUnit вроде предоставляет такую возможность. Буду копать.