Допустим, у меня есть служебная функция, которая для простоты (реальная вещь сложна и неуместна ), возвращает строку запроса текущего окна.
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
?