Cypress — добавить пользовательский заголовок для всех запросов XHR

Я заметил, что заголовок X-CSRFToken удаляется между тестами для всех запросов XHR, которые запускаются из тестируемого приложения. Я не уверен, что сохраняю этот заголовок, так как уже сохраняю файлы cookie через Cypress.Cookies.preserveOnce('sessionid', 'csrftoken')

Поэтому я подумал о добавлении пользовательского заголовка X-CSRFToken ко всем запросам XHR от приложения. Вот скрипт, который я использовал, где я извлекаю csrftoken из файлов cookie и устанавливаю пользовательский заголовок.

cy.server({
   onAnyRequest: function(route, proxy) {
        proxy.xhr.setRequestHeader('X-CSRFToken', cy.getCookie('csrftoken'));
   }
})

Здесь я получаю следующую ошибку,

Argument of type '{ onAnyRequest: (route: any, proxy: any) => void; }' is not assignable to parameter of type 'Partial<ServerOptions>'.
  Object literal may only specify known properties, and 'onAnyRequest' does not exist in type 'Partial<ServerOptions>'.

Я ожидаю любого рабочего решения для этого подхода или лучшего решения.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
9
0
6 807
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я думаю, вы ищете onRequest вместо onAnyRequest. Вот документация для cy.server вариантов

Я тоже прошла через onRequest. Но я слышал от г-на Глеба Бахмутова, что эта функция сейчас недоступна в @cypress.

Kondasamy Jayaraman 03.03.2019 13:35
Ответ принят как подходящий

Просто чтобы все были в курсе, я пообщался с создателями Cypress и узнал, что заглушка исходящего запроса находится в разработке и ее можно отследить по - https://github.com/cypress-io/cypress/issues/687

Запустите свой код в операторе beforeEach.

beforeEach(() => {
    cy.server({
        onAnyRequest: function(route, proxy) {
           proxy.xhr.setRequestHeader('X-CSRFToken', cy.getCookie('csrftoken'));
       }
    })
});

cy.server устарел :/

Lonely 25.12.2021 18:24

Теперь cy.server устарел, вместо него можно использовать cy.intercept:

cy.intercept('http://api.company.com/', (req) => {
  req.headers['authorization'] = `token ${token}`
})

Подробнее в документы.

работает идеально, спасибо! При желании вы можете установить, например. 'GET' или 'POST' в качестве первого параметра.

Lonely 25.12.2021 18:23

Другие вопросы по теме