Cypress предоставляет удобные методы для взаимодействия с
LocalStorage, что позволяет сохранять, извлекать и удалять данные на
стороне клиента в процессе тестирования веб-приложений. LocalStorage —
это механизм веб-хранилища, который позволяет сохранять данные в
браузере на стороне клиента без ограничения на время жизни сессии.
Доступ к LocalStorage осуществляется через объект
window.localStorage.
LocalStorage поддерживает несколько базовых операций:
setItem(key, value) — сохраняет значение
value по ключу key.getItem(key) — возвращает значение по ключу
key. Если ключ отсутствует, возвращает
null.removeItem(key) — удаляет значение по ключу
key.clear() — очищает весь LocalStorage.key(index) — возвращает ключ по указанному
индексу.length — возвращает количество элементов в
хранилище.Cypress не предоставляет отдельного API для LocalStorage напрямую,
однако доступ к нему можно получить через объект window в
командной цепочке Cypress.
Пример сохранения данных:
cy.window().then((win) => {
win.localStorage.setItem('token', '12345abcdef');
});
Пример получения данных:
cy.window().then((win) => {
const token = win.localStorage.getItem('token');
expect(token).to.equal('12345abcdef');
});
Пример удаления данных:
cy.window().then((win) => {
win.localStorage.removeItem('token');
expect(win.localStorage.getItem('token')).to.be.null;
});
Очистка всего LocalStorage:
cy.window().then((win) => {
win.localStorage.clear();
expect(win.localStorage.length).to.equal(0);
});
Для упрощения и повторного использования кода часто создаются
кастомные команды. В файле cypress/support/commands.js
можно определить команды для работы с LocalStorage:
Cypress.Commands.add('setLocalStorage', (key, value) => {
cy.window().then((win) => {
win.localStorage.setItem(key, value);
});
});
Cypress.Commands.add('getLocalStorage', (key) => {
cy.window().then((win) => {
return win.localStorage.getItem(key);
});
});
Cypress.Commands.add('clearLocalStorage', () => {
cy.window().then((win) => {
win.localStorage.clear();
});
});
Использование кастомных команд делает тесты более читаемыми:
cy.setLocalStorage('user', 'JohnDoe');
cy.getLocalStorage('user').then((value) => {
expect(value).to.equal('JohnDoe');
});
cy.clearLocalStorage();
LocalStorage можно использовать для хранения данных, необходимых
между тестами. По умолчанию Cypress очищает LocalStorage перед каждым
тестом, но это поведение можно изменить с помощью хуков
before, beforeEach и плагина
cypress-localstorage-commands.
Пример сохранения данных между тестами без плагинов:
before(() => {
cy.setLocalStorage('session', 'xyz123');
});
beforeEach(() => {
cy.window().then((win) => {
const session = win.localStorage.getItem('session');
if (!session) {
win.localStorage.setItem('session', 'xyz123');
}
});
});
it('проверка наличия сессии', () => {
cy.getLocalStorage('session').then((value) => {
expect(value).to.equal('xyz123');
});
});
При тестировании важно не только записывать данные, но и проверять их корректность. Для этого используют Cypress assertions:
cy.window().then((win) => {
const user = JSON.parse(win.localStorage.getItem('user'));
expect(user.name).to.equal('John');
expect(user.roles).to.include('admin');
});
cypress-localstorage-commands,
который упрощает сохранение и восстановление состояния.LocalStorage является мощным инструментом для имитации состояния приложения на стороне клиента. Корректная работа с ним позволяет создавать надежные тесты, проверяющие авторизацию, пользовательские настройки и другие ключевые элементы веб-приложения.