#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
)