В Cypress хорошо задокументировано , что вы можете использовать псевдоним для определенных сетевых запросов, которые затем можно "подождать".Это особенно полезно, если вы хотите что-то сделать в Cypress после того, как определенный сетевой запрос был запущен и завершен.
Пример ниже из документации Cypress:
cy.server()
cy.route('POST', '**/users').as('postUser') // ALIASING OCCURS HERE
cy.visit('/users')
cy.get('#first-name').type('Julius{enter}')
cy.wait('@postUser')
Однако, поскольку я использую GraphQL в своем приложении, псевдонимы больше не становятся простым делом.Это связано с тем, что все запросы GraphQL совместно используют одну конечную точку /graphql
.
Несмотря на то, что невозможно провести различие между различными запросами graphQL, используя только конечную точку url, * возможно дифференцировать запросы graphQL с использованиемoperationName
(см. Следующее изображение).
Перекопав документацию, похоже, нет пути к псевдониму конечных точек graphQLиспользуя operationName
из тела запроса.Я также возвращаю operationName
(желтая стрелка) в качестве пользовательского свойства в заголовке моего ответа;однако мне так и не удалось найти способ использовать его для псевдонимов определенных запросов graphQL.
МЕТОД СБОРА 1: Этот метод пытается использовать фиолетовую стрелку, показанную на изображении.
cy.server();
cy.route({
method: 'POST',
url: '/graphql',
onResponse(reqObj) {
if (reqObj.request.body.operationName === 'editIpo') {
cy.wrap('editIpo').as('graphqlEditIpo');
}
},
});
cy.wait('@graphqlEditIpo');
Этот метод не работает, поскольку псевдоним graphqlEditIpo
регистрируется во время выполнения, и поэтому я получаю следующую ошибку:
CypressError: cy.wait() не удалось найти зарегистрированный псевдоним для: '@graphqlEditIpo'.Доступные псевдонимы: 'ipoInitial, graphql'.
МЕТОД СБОРА 2: Этот метод пытается использовать желтую стрелку, показанную на изображении.
cy.server();
cy.route({
method: 'POST',
url: '/graphql',
headers: {
'operation-name': 'editIpo',
},
}).as('graphql');
cy.wait('graphql');
Этот метод не работает, потому что свойство headers в объекте параметров для cy.route фактически предназначено для приема заголовков ответов для маршрутов с заглушками в соответствии с документами .Здесь я пытаюсь использовать его для идентификации моего конкретного запроса graphQL, который, очевидно, не будет работать.
Что приводит меня к моему вопросу: как я могу использовать псевдонимы определенных запросов / мутаций graphQL в Cypress?Я что-то пропустил?