Estoy usando Testcafe para mis pruebas de integración y quiero probar el escenario en el que mi aplicación vuelve a intentar una llamada a la API después de recibir un error. Estoy usando la biblioteca de reintentos asíncronos para hacer mis llamadas. Retry es una utilidad que creé para envolver la llamada a la API para poder envolver el código repetitivo para llamar a async-retry:
const response = await Retry( () => { return fetch( buildUrl(env, csrf, '/api/myCustomCall', queryParams), options ); }, 'getRecommendations', { onRetry: () => { console.log('RETRYING'); } } ); Para la posteridad, esta es la utilidad Retry :
import retry, { AsyncRetryOptions } from 'async-retry'; export const Retry = ( func: () => Promise<any>, name: string, opts: AsyncRetryOptions = {} ): Promise<any> => { const retryOptions = { retries: opts.retries || 3, factor: opts.factor || 2, minTimeout: opts.minTimeout || 3000, maxTimeout: opts.maxTimeout || Infinity, randomize: opts.randomize || true, onRetry: (error: Error, attempt: number) => { console.error( `${new Date().toString()} - ${name} failed ${attempt} times, trying again` ); } }; return retry(func, retryOptions); };Esta es mi prueba:
test.requestHooks( RequestMock() .onRequestTo(/myCustomCall/) .respond({ error: 'Bad value for request parameter' }, 400, responseHeaders) )('Recommendation request retries 3 times', async (t) => { await playgroundInit(t); await t.expect(recommendationLogger.requests.length).eql(4); }); playgroundInit es una función de utilidad que hace cosas como iniciar sesión y navegar a la página que estoy probando. Cuando estaba desarrollando, usé las herramientas de desarrollo de Chrome para bloquear la solicitud de la API para probar los reintentos, lo cual fue exitoso. Vi que los reintentos funcionaban. Sin embargo, me gustaría imitar esto en mi prueba para automatizar este comportamiento. ¿Cómo se burla de una solicitud en testcafe para activar reintentos?
Según tengo entendido, está realizando su llamada a la API desde el código de prueba de TestCafe, pero no desde la página probada.
En este caso, no se aplicará el mecanismo RequestMock. RequestMock funciona a partir de llamadas a la API que se realizaron desde la página del sitio web. En su caso, usted mismo inicia una solicitud, por lo que el proxy de TestCafe no la procesa.
Si desea que RequestMock funcione, puede intentar hacer sus llamadas a la API desde el navegador, pero no desde el lado de la prueba. Para hacer esto, puede usar el mecanismo ClientFunction que le permite inyectar código JS en la página del sitio web.