Кипарис: Перехват маршрута, которого не существует

#javascript #cypress #end-to-end

Вопрос:

В настоящее время я authorization.oauth2 успешно перехватываю запрос, но то, что я хотел бы сделать, — это отправить запрос на мой локальный хост (несуществующий маршрут в приложении). Однако, когда я это делаю, я получаю ошибку 404.

Есть ли в любом случае возможность перехватить запрос на несуществующий маршрут?

   cy.intercept('*authorization.oauth2*', req => {
    cy.request('POST', '/auth/intercept/handle');
    req.reply('');
  });

  // This route doesn't exist:
  cy.intercept('POST', '/auth/intercept/handle', req => {
    // Handle stuff
  });
 

Это результат запроса:

 cy.request() failed on:

https://localhost:4200/auth/intercept/handle

The response we received from your web server was:

  > 404: Not Found

This was considered a failure because the status code was not 2xx or 3xx.

If you do not want status codes to cause failures pass the option: failOnStatusCode: false

-----------------------------------------------------------

The request we sent was:

Method: POST
URL: https://localhost:4200/auth/intercept/handle
Headers: {
  "Connection": "keep-alive",
  "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/8.1.0 Chrome/89.0.4328.0 Electron/12.0.0-beta.14 Safari/537.36",
  "accept": "/",
  "accept-encoding": "gzip, deflate",
  "content-length": 0
}

-----------------------------------------------------------

The response we got was:

Status: 404 - Not Found
Headers: {
  "x-powered-by": "Express",
  "access-control-allow-origin": "*",
  "content-security-policy": "default-src 'none'",
  "x-content-type-options": "nosniff",
  "content-type": "text/html; charset=utf-8",
  "content-length": "161",
  "date": "Tue, 03 Aug 2021 19:57:39 GMT",
  "connection": "keep-alive"
}
Body: <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot POST /auth/intercept/handle</pre>
</body>
</html>

Because this error occurred during a after each hook we are skipping the remaining tests in the current suite: Roles Page
 

Комментарии:

1. Проблема, по-видимому, связана с запросом в строке 2 вашего примера, а не с перехватом. Когда вы запрашиваете конечную точку, которая не существует, ожидается поведение 404-го ответа. Что бы вы хотели, чтобы произошло?

2. Я хочу, чтобы перехват перехватил запрос и запустил обратный вызов.

3. Я нашел это в документах: cy.intercept() cannot be debugged using cy.request()! Cypress only intercepts requests made by your front-end application.

Ответ №1:

вместо выполнения cy.intercept для отправки запроса post из cy intercept, попробуйте использовать cy.intercept для прямого ответа на ваш интерфейс с данными, которые вы хотите включить. В конце концов, цель cy.intercept состоит в том, чтобы перехватывать запросы на изменение данных в запросе и вызывать поведение, которое мы хотим протестировать в нашем интерфейсе.

Попробуйте что-нибудь вроде этого:

 const res = { message: true }

cy.intercept(
    {
        method: 'POST',
        url: '*authorization.oauth2*'
    },
    res
)