Cypress вырубает заголовок X-CSRFToken

Заметил, что средство запуска тестов Cypress вырезает X-CSRFToken из заголовка запроса, что приводит к возврату запроса 403 Forbidden. Вот скриншот заголовков из ручного запуска и тестового запуска Cypress,

Снимок экрана, сделанный во время навигации в браузере Chrome:  введите описание изображения здесь

Снимок экрана, сделанный во время выполнения теста Cypress:  введите описание изображения здесь

Чтобы убедиться в этом, я воспроизвел запрос, curl приложив X-CSRFToken. Тогда все работало нормально. Как я мог справиться с этим при запуске тестов Cypress?

ПРИМЕЧАНИЕ. Это происходит при выполнении событий перетаскивания с использованием функции trigger().


person Kondasamy Jayaraman    schedule 28.02.2019    source источник
comment
Как вы входите в свое приложение? Вы используете cy.request? Ваш токен хранится в localStorage?   -  person bkucera    schedule 28.02.2019
comment
Я замечаю такое поведение только тогда, когда у меня есть серия тестовых шагов, упомянутых в отдельных it() функциях. Если я помещу все тесты в одну it() функцию, эта проблема исчезнет. Чтобы ответить на ваш вопрос, я проверяю сетевые журналы из chrome DevTools. Запросы запускаются тестируемым приложением. Токены хранятся в Cookies   -  person Kondasamy Jayaraman    schedule 01.03.2019


Ответы (1)


Cypress автоматически очищает файлы cookie между каждым тестом, поэтому, хотя вы правильно установили свои файлы cookie при входе в систему, они были бы отброшены, как только этот блок it (или specify, describe или context) завершился. Это означает, что любые последующие сетевые запросы будут иметь новое состояние (по замыслу).

Чтобы обойти это, вы можете использовать Cypress.Cookies.preserveOnce: https://docs.cypress.io/api/cypress-api/cookies.html#Preserve-Once

Вот как я использовал его, чтобы обойти аналогичную проблему:

    beforeEach(() => {
        Cypress.Cookies.preserveOnce('XSRF-TOKEN', 'session_id')
    })

И если вы хотите поддерживать это состояние во всех своих тестовых наборах (т. Е. В отдельных spec.js файлах), вы можете поместить это в свой cypress/support/index.js файл:

Cypress.Cookies.defaults({
    preserve: ['XSRF-TOKEN', 'session_id']
})
person Abraham Brookes    schedule 15.03.2021