tutorial test react nodejs how chrome javascript automated-tests jestjs puppeteer

javascript - test - La devolución de llamada asincrónica no se invocó dentro del tiempo de espera de 5000 ms especificado por jest.setTimeout



puppeteer test (8)

Asegúrese de invocar done(); en devoluciones de llamada o simplemente no pasará la prueba.

beforeAll((done /* call it or remove it*/) => { done(); // calling it });

Se aplica a todas las demás funciones que tienen una devolución de llamada done ().

Estoy usando titiritero y broma para ejecutar algunas pruebas de front-end.

Mis pruebas se ven de la siguiente manera:

describe("Profile Tab Exists and Clickable: /settings/user", () => { test(`Assert that you can click the profile tab`, async () => { await page.waitForSelector(PROFILE.TAB); await page.click(PROFILE.TAB); }, 30000); });

A veces, cuando ejecuto las pruebas, todo funciona como se esperaba. Otras veces, recibo un error:

Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout. at node_modules/jest-jasmine2/build/queue_runner.js:68:21 at Timeout.callback [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:633:19)

Esto es extraño porque:

  1. Especifiqué que el tiempo de espera sea 30000

  2. Si recibo o no este error es aparentemente muy aleatorio

¿Alguien puede adivinar por qué sucede esto?


Debería llamar a la función done cuando está asincrónica de la prueba.

describe("Profile Tab Exists and Clickable: /settings/user", () => { test(`Assert that you can click the profile tab`, async () => { await page.waitForSelector(PROFILE.TAB); await page.click(PROFILE.TAB); }, 30000); });


La respuesta a esta pregunta ha cambiado a medida que Jest ha evolucionado. Respuesta actual (marzo de 2019):

  1. Puede anular el tiempo de espera de cualquier prueba individual agregando un tercer parámetro. es decir. it(''runs slow'', () => {...}, 9999)

  2. Puede cambiar el valor predeterminado usando jest.setTimeout . Para hacer esto:

// config "setupFilesAfterEnv": [ // NOT setupFiles "./src/jest/defaultTimeout.js" ],

y

// File: src/jest/defaultTimeout.js /* global jest */ jest.setTimeout(1000)

  1. Como otros han notado, y no están directamente relacionados con esto, no es necesario hacerlo con el enfoque asíncrono / espera.

Me gustaría agregar (esto es un poco largo para un comentario) que incluso con un tiempo de espera de 3000 mis pruebas a veces fallaban (al azar) con

Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.

Gracias a la gran respuesta de @ Tarun, creo que la forma más corta de arreglar muchas pruebas es:

describe(''puppeteer tests'', () => { beforeEach(() => { jest.setTimeout(10000); }); test(''best jest test fest'', async () => { // blah }); });


Mi solución aquí: pero no sé si coincide con la condición de su código o no, pero puede probar esto.

it(''GET should return a status of 200 OK'', async (done) => { await frisby .get(''api-url'') .expect(''status'', 200) .done(done) });



Por lo tanto, el tiempo de espera que especifique aquí debe ser más corto que el tiempo de espera predeterminado.

El tiempo de espera predeterminado es 5000 y el marco por defecto es jasmine en caso de jest . Puede especificar el tiempo de espera dentro de la prueba agregando

jest.setTimeout(30000);

Pero esto sería específico para la prueba. O puede configurar el archivo de configuración para el marco.

https://facebook.github.io/jest/docs/en/configuration.html#setuptestframeworkscriptfile-string

// jest.config.js module.exports = { setupTestFrameworkScriptFile: ''./jest.setup.js'' } // jest.setup.js jest.setTimeout(30000)

Ver este hilo también

https://github.com/facebook/jest/issues/5055

https://github.com/facebook/jest/issues/652


Recientemente me encontré con este problema por una razón diferente: estaba ejecutando algunas pruebas sincrónicamente usando jest -i , y solo se agotaba el tiempo de espera. Para cualquier razonamiento, ejecutar las mismas pruebas usando jest --runInBand (aunque -i está destinado a ser un alias) no se agota.

Tal vez esto ayude a alguien ¯/_(:/)_/¯