Me burlo de un punto final con parámetros de consulta en Cypress. Pero cuando se proporciona un campo de consulta con una matriz de elementos de campo.
cy.intercept( { method: 'POST', pathname: '/api/initiate/manual', hostname: Cypress.env('CY_API_URL'), https: true, query: { orderId: '13535353453', items: [ { id: '3853438474', name: 'Standard Wholesale HB Yellow Pencils', }, { id: '2424534353453', name: 'natural wood dipped end 72 color', }, ], }, }, { statusCode: 200, }, ).as('mockManuelOrder');da error:
CypressError
Se proporcionó un RouteMatcher no válido a cy.intercept(). query.items debe ser una cadena o una expresión regular.
como puedo solucionar el problema?, necesito enviar los parametros de la consulta tal como esta.
Esto parece funcionar, aunque he adivinado cómo se ve la URL cuando se envía por cable (puede que no corresponda).
Básicamente, moví los parámetros de consulta de RouteMatcher a RouteHandler y usé javascript para verificarlos.
Si coinciden, asigno un alias dinámico y envío la respuesta del código auxiliar.
cy.intercept( { method: 'POST', pathname: '/api/initiate/manual', hostname: Cypress.env('CY_API_URL'), https: true, }, (req) => { const params = { "orderId": "13535353453", "items": [ {"id": "3853438474", "name": "Standard Wholesale HB Yellow Pencils"}, {"id": "2424534353453", "name": "natural wood dipped end 72 color"} ] } const matches = req.query.orderId === params.orderId && req.query.items == JSON.stringify(params.items) if (matches) { req.alias = 'mockManuelOrder' req.reply({statusCode: 200}) } } // trigger POST cy.wait('@mockManuelOrder') // passesDebería estar funcionando:
query: JSON.stringify({ orderId: '13535353453', items: [ { id: '3853438474', name: 'Standard Wholesale HB Yellow Pencils', }, { id: '2424534353453', name: 'natural wood dipped end 72 color', }, ], }),