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 допускает методы ответа, но я не могу найти синтаксис того, что я хочу сделать, в их документации. Как мне получить параметры запроса в моем методе ответа, чтобы я мог решить, какой ответ возвращать?

EMacsVI, удалось ли найти решение? Я столкнулся с той же проблемой

Digvijay Upadhyay 05.12.2018 18:13

Я тоже ищу решение этой проблемы.

Josh Bowden 23.04.2019 18:55

почти там (github.com/cypress-io/cypress/pull/4176)

Daniel 03.08.2020 23:41
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
24
3
4 360
3

Ответы 3

Я считаю, что это должно сработать

cy.server({
        onResponse: ({ status, url, response }) => {
             if (url !== 'yoururl') return response;
             return { 
                ...response,
               body: { status: status === 1234 ? 'success' : 'failure' }
             };
        }    
});

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

EmacsVI 11.09.2018 20:29

К сожалению, в настоящее время это не поддерживается в cy.server.

Проблема отслеживается здесь: https://github.com/cypress-io/cypress/issues/521

Обходной путь

Используйте стандартный mocking javascript. Вы можете запустить эти макеты в тестах, используя cypress onBeforeLoad, несколько раз упомянутый в связанный выпуск. Это некрасиво. Надеюсь, cypress получит встроенную поддержку в cy.server.

У меня была такая же проблема, и я сделал функцию, чтобы включить это. Для этого действительно требуется URL-адрес возврата, но инструкции по установке кода можно увидеть здесь https://bitbucket.org/snippets/matt-tasc/onraxo

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