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.