Перехват Cypress не соответствует маршруту со статусом 204

Я реализую кипарисовые тесты в нашем приложении Angular, и у меня возникла проблема с ожиданием завершения запроса. Я предполагаю, что это связано со статусом запроса 204 вместо 200.

Это функция/команда, которую я вызываю в своем тесте:

export function logout() {
    cy.intercept('/api/security/logout').as('logoutRequest');
    cy.getCookie('SESSION').then((cookie) => {
        if (cookie != null) {
            cy.request(
                {
                    method: 'POST',
                    url: '/api/security/logout',
                }
            );
        }
    });
    cy.wait('@logoutRequest');
}

Моя проблема в том, что маршрут /api/security/logout не распознается как псевдоним @logoutRequest, и поэтому время ожидания всегда истекает. Даже если есть веский запрос. Как вы можете видеть здесь, в протоколе испытаний: Test FailingNo matches of route

Я пытался изменить маршрут с помощью * или **, но безуспешно. Я был бы очень рад, если бы вы могли мне помочь.

Привет. Я немного обеспокоен структурой и подозреваю, что .wait('@logoutRequest') вызывается до того, как ваш обратный вызов будет выполнен. Можете ли вы попытаться связать его с другим обратным вызовом, чтобы вы были уверены, что они вызываются последовательно. Кроме того, я предлагаю вам явно определить метод внутри команды перехвата;).

Alex Izbas 17.05.2022 10:34

Я понимаю вашу точку зрения, но это немного отличается от проблемы: маршрут /api/security/logout не распознается как псевдоним @logoutRequest.

PhilipAllStar 17.05.2022 10:56

хорошо, я вижу, что он либо не зарегистрирован, либо зарегистрирован слишком поздно. Не могли бы вы перезаписать свой перехват cy.log и проверить время его вызова/регистрации?

Alex Izbas 17.05.2022 12:01
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
3
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не можете использовать cy.intercept(), чтобы поймать cy.request().

cy.intercept(), cy.server() и cy.route()

cy.request() sends requests to actual endpoints, bypassing those defined using cy.route() or cy.intercept()

Просто цепочка .then() от запроса, чтобы обработать ответ

cy.request({method: 'POST', url: '/api/security/logout', failOnStatusCode: false})
  .then(response => {
    expect(response.status).to.eq(200)
  })

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