Cypress.io - программно задает ответ на основе параметров запроса в cy.route()
Я завершаю запрос api в своем сквозном тесте и хотел бы иметь возможность возвращать другой ответ в зависимости от параметров запроса, которые отправляются.
В настоящее время мой заглушка возвращает статический ответ, независимо от того, что отправлено, и выглядит следующим образом:
cy.server()
cy.route({
method: 'POST',
url: '**/redeem-code',
status: 200,
response: {
status: "Success"
},
delay: 500
})
Я хотел бы иметь возможность проверить опубликованные параметры запроса, а затем условно решить, какой ответ вернуть. Я пытаюсь сделать что-то вроде этого:
cy.server()
cy.route({
method: 'POST',
url: '**/redeem-code',
status: 200,
response: (req) => {
if(req.code == '1234') return { status: "Success" }
else return { status: "Failure" }
},
delay: 500
})
Очевидно, что код выше не работает; это просто пример того, что я пытаюсь сделать.
Я знаю, что Cypress позволяет использовать методы ответа, но я не могу найти синтаксис для того, что я хочу делать в любом месте своих документов. Как получить параметры запроса в методе ответа, чтобы я мог решить, какой ответ вернуть?
Ответы
Ответ 1
Я считаю, что это должно работать
cy.server({
onResponse: ({ status, url, response }) => {
if(url !== 'yoururl') return response;
return {
...response,
body: { status: status === 1234 ? 'success' : 'failure' }
};
}
});
Ответ 2
К сожалению, в настоящее время это не поддерживается cy.server
.
Проблема отслеживается здесь: https://github.com/cypress-io/cypress/issues/521
Временное решение
Используйте стандартную насмешку JavaScript. Вы можете запустить эти макеты в тестах, используя onBeforeLoad
, упомянутый несколько раз в связанной проблеме. Это не красиво. Надеюсь, cy.server
получит собственную поддержку в cy.server
.