В веб-разработке хэши в URL используются для указания конкретных частей страницы или для управления состоянием приложения без полной перезагрузки. В тестировании с помощью Cypress работа с хэшами позволяет проверять корректность навигации, состояния и реакций интерфейса на изменения URL.
Хэш — это часть URL, следующая после символа #.
Пример:
https://example.com/page#section1
Здесь #section1 — хэш. В браузере изменение хэша не
приводит к перезагрузке страницы, но может инициировать события
JavaScript, такие как hashchange.
В Cypress URL с хэшами можно проверять и изменять через методы,
которые взаимодействуют с объектом window.location и
стандартными командами Cypress.
Для проверки текущего хэша используется команда
.location() с параметром "hash":
cy.location('hash').should('eq', '#section1');
cy.location('hash') возвращает строку текущего хэша,
включая символ #.should('eq', '#section1') проверяет точное совпадение с
ожидаемым значением.Альтернативно можно использовать регулярные выражения:
cy.location('hash').should('match', /^#section\d$/);
Это удобно для динамических хэшей.
Изменение хэша на лету в тестах позволяет проверять работу внутренних ссылок и динамических элементов. Пример:
cy.get('a[href="#section2"]').click();
cy.location('hash').should('eq', '#section2');
Также можно программно изменить хэш через
cy.window():
cy.window().then((win) => {
win.location.hash = 'section3';
});
cy.location('hash').should('eq', '#section3');
Использование cy.window() позволяет тестировать
сценарии, где изменение хэша инициирует события внутри приложения.
В JavaScript событие hashchange вызывается при изменении
хэша. Cypress позволяет проверять поведение приложения при этом событии.
Например:
cy.window().then((win) => {
const callback = cy.stub();
win.addEventListener('hashchange', callback);
win.location.hash = 'newSection';
cy.wrap(callback).should('be.calledOnce');
});
Это позволяет убедиться, что обработчики события вызываются корректно и интерфейс обновляется ожидаемым образом.
В современных одностраничных приложениях (SPA) хэш часто используется
вместе с history API для управления состоянием маршрутизации. Cypress
поддерживает проверку истории браузера через команды .go(),
.back() и .forward().
Пример теста маршрутизации с хэшами:
cy.visit('/page#start');
cy.get('a[href="#next"]').click();
cy.location('hash').should('eq', '#next');
cy.go('back');
cy.location('hash').should('eq', '#start');
cy.go('forward');
cy.location('hash').should('eq', '#next');
Такой подход позволяет проверять навигацию между различными состояниями страницы без полной перезагрузки.
Некоторые приложения используют хэш для передачи параметров, например
#tab=2&filter=active. В Cypress проверка таких хэшей
осуществляется с помощью методов работы со строками и регулярных
выражений:
cy.location('hash').should((hash) => {
expect(hash).to.include('tab=2');
expect(hash).to.match(/filter=active/);
});
Это полезно для проверки корректного сохранения состояния интерфейса при изменении параметров через хэш.
#.cy.window() для эмуляции программных
изменений хэша и проверки реакции приложения.Работа с хэшами в Cypress позволяет создавать надежные тесты для проверки маршрутизации, состояния интерфейса и поведения одностраничных приложений без необходимости полной перезагрузки страниц.