Как очистить кэш запросов после попытки выполнить несколько запросов в cypress?

#javascript #cypress

#язык JavaScript #кипарис

Вопрос:

Вот мой код, я передаю массив идентификаторов, и для каждого идентификатора я нажимаю запрос Api.

 for (let i = 0; i lt; 10; i  ) {  cy.request({  method: 'GET',  url: `https://[API endpoint ]/api/v1/[requst]/${ids[i]}`,  headers: {  "authorization": token  }  })  .then((res) =gt; {  return usernames.push([{ value: res.body.instagrams[0].username }])  })  .then((res) =gt; {  return cy.wait(2000)  })  }  

Всякий раз, когда я выполняю код, для 2-3 запросов он работает нормально, а затем выдает ошибку типа

 Uncaught Error: invalid payload  

Я вижу, что мой URI правильный и отправляет правильный запрос.

Ответ №1:

вы должны изменить свой код, чтобы обернуть все ожидающие обещания в массив. Измененный фрагмент кода выглядит следующим образом:

 async function processRequest(){  let result;  let promises = [];  for (let i = 0; i lt; 10; i  ) {  promises.push(cy.request({  method: 'GET',  url: `https://[API endpoint ]/api/v1/[requst]/${ids[i]}`,   headers: {  "authorization": token  }  }))  }   result = await Promise.all(promises);  for(let i = 0; i lt; 10; i  ){  usernames.push([{ value: result[i].username }])  }  }  

Комментарии:

1. Спасибо за ответ ! Но это не работает 🙁

2. не могли бы вы, пожалуйста, сохранить аналогичный код в jsfiddle или где-нибудь еще, чтобы мы могли разобраться в ошибке? очевидно, что в приведенном выше фрагменте будут внесены некоторые изменения.

3. Получаю ту же ошибку, что и выше. И извините, брат не может воспроизвести на jsfiddle, потому что он содержит учетные данные

Ответ №2:

Здесь cy.request не работает должным образом с обещанием. Либо при нажатии на массив обещаний, удалите cy.request() его, либо просто обработайте с помощью javascript.

 async findUserName(ids, token) {  let promise = [] let usernames = [] ids.forEach(id =gt; {  promise.push(  fetch(`https://[host]/api/v1/[endpoint]/${id}`, {  headers: {  'Content-Type': 'application/json',  "authorization": token  }  })  .then((res) =gt; {  return res.json();  })  ) })  let result = await Promise.all(promise); result.forEach((data) =gt; {  usernames.push([{ value: data.instagrams[0].username }]) }) return usernames  

}