Я написал функцию для получения значения заданной строки запроса на основе Дэвида Уолла sh Получить параметры строки запроса .
export const getQueryStringValue = (name) => {
const formattedName = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
const regex = new RegExp(`[\\?&]${formattedName}=([^&#]*)`);
const results = regex.exec(window.location.search);
return results === null
? ''
: decodeURIComponent(results[1].replace(/\+/g, ' '));
};
У меня есть написал тест для функции на основе Как смоделировать window.location.href с Jest + Vuejs? .
it('should return query string value', () => {
global.window = Object.create(window);
const url = 'http://dummy.com?foo=bar';
Object.defineProperty(window, 'location', {
value: {
href: url
}
});
expect(getQueryStringValue('foo')).toBe('bar');
});
Однако, когда я запускаю тест, я получаю следующее ошибка.
expect(received).toBe(expected) // Object.is equality
Expected: "bar"
Received: ""
И когда я консоль журнала window.location.search
, он возвращает undefined
.
console.log __tests__/getQueryStringValue.test.js:14
undefined
Почему поиск Window.location возвращает undefined
, даже когда Window.location href включает строку запроса (?foo=bar
)? Разве установки href не должно быть достаточно?