Можно ли имитировать объект window.location для теста qUnit?

Допустим, у меня есть служебная функция, которая для простоты (реальная вещь сложна и неуместна ), возвращает строку запроса текущего окна.

var someUtilityFunction = () {
    return window.location.search.substring(1);
};

Теперь я хочу провести модульное тестирование этой функции в qUnit (, не уверен, подходит ли тестовая система или нет):

test('#1 someUtilityFunction works', function () {
    // setup
    var oldQS = window.location.search;
    window.location.search = '?key1=value1&key2=value2&key3=value3';

    var expectedOutput = 'key1=value1&key2=value2&key3=value3';

    // test
    equals(someUtilityFunction(),
        expectedOutput,
        'someUtilityFunction works as expected.');

    // teardown
    window.location.search = oldQS;
});

Проблема здесь в том, что установка window.location.searchна другую строку запроса приводит к перезагрузке страницы, по существу входя в бесконечный цикл запросов. Есть ли способ смоделировать объект window.location без внесения каких-либо изменений в функцию someUtilityFunction?

18
задан jbabey 9 August 2012 в 20:32
поделиться