Я заметил, что заголовок 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>'.
Я ожидаю любого рабочего решения для этого подхода или лучшего решения.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, вы ищете onRequest вместо onAnyRequest. Вот документация для cy.server вариантов
Просто чтобы все были в курсе, я пообщался с создателями 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 устарел :/
Теперь cy.server устарел, вместо него можно использовать cy.intercept:
cy.intercept('http://api.company.com/', (req) => {
req.headers['authorization'] = `token ${token}`
})Подробнее в документы.
работает идеально, спасибо! При желании вы можете установить, например. 'GET' или 'POST' в качестве первого параметра.
Я тоже прошла через
onRequest. Но я слышал от г-на Глеба Бахмутова, что эта функция сейчас недоступна в @cypress.