Hola, estoy tratando de automatizar la API de paginación usando cypress. Esta API toma 2 parámetros como 'pageNo' y 'pageSize', pageNo significa en qué página y pageSize significa registros totales devueltos por el servidor (con un máximo de 15 en 1 página).
Problema: - Quiero buscar un nombre de archivo en particular que devuelve esta API, no sé en qué página aparece, tan pronto como lo encontré, tengo que salir de ambos bucles (pageNo y pageSize) Aquí está mi código: -
describe('Check particular value', function() { it('Check record', ()=>{ for (let index = 1; index < 7; index++) { cy.request({ method:"GET", url:"https://mydomainName.com/api/v1/searchFile/getFileList", qs:{"pageNo":index,"pageSize":15}, headers:{"authorization": "jwt token "} }).then(function(response){ for (let j = 0; j < response.body.data.length; j++) { if (response.body.data[j].fileName.includes('file_2021_08_20_04_31.txt')) { break; } } }); // how can i come out of this parent loop } }); });¡¡Gracias de antemano!!
Haz el bucle dentro de una función. La función regresa cuando se encuentra el elemento o se repite para la página siguiente.
Si llega a la página 7 sin encontrar, falla la prueba (o devuelve un mensaje).
const findFile = (expected, pageSize, maxPages, pageNo = 1) => { if (pageNo === maxPages) { throw `"${expected} was not found` } return cy.request({ ... qs:{ pageNo ,pageSize }, ... }).then(response => { const files = response.body.data const foundFiles = files.filter(file => file.fileName === expected) if (!foundFiles.length) { // not on this page, try next pageNo = pageNo + 1 findFile(expected, pageSize, maxPages, pageNo) } else { return foundFiles // if you want the matching objects } }) }) it('finds a file', () => { findFile('file123.txt', 15, 7).then(foundFiles => { // example further assertion on found files foundFiles.forEach(file => expect(file.fileName).to.eq('file123.txt')) }) })