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:
-
Especifiqué que el tiempo de espera sea 30000
-
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):
-
Puede anular el tiempo de espera de cualquier prueba individual agregando un tercer parámetro. es decir.
it(''runs slow'', () => {...}, 9999)
-
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)
- 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)
});
Para aquellos que buscan una explicación sobre
jest --runInBand
, pueden ir a la documentación
Ejecutar titiriteros en entornos CI
https://github.com/smooth-code/jest-puppeteer
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
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
¯/_(:/)_/¯