Estoy usando Puppeteer y Jest 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, me sale un error:
Tiempo de espera: la devolución de llamada asíncrona no se invocó dentro del tiempo de espera de 5000 ms especificado por jest.setTimeout.
at node_modules/jest-jasmine2/build/queue_runner.js:68:21 <br/> 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 fuera 30000
Si obtengo o no este error es aparentemente muy aleatorio
¿Por qué está pasando esto?
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 predeterminado 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 de la prueba. O puede configurar el archivo de configuración para el marco.
// jest.config.js module.exports = { // setupTestFrameworkScriptFile has been deprecated in // favor of setupFilesAfterEnv in jest 24 setupFilesAfterEnv: ['./jest.setup.js'] } // jest.setup.js jest.setTimeout(30000)Ver también estos hilos:
Hacer jasmine.DEFAULT_TIMEOUT_INTERVAL configurable #652
PD: El error ortográfico setupFilesAfterEnv (es decir, setupFileAfterEnv ) también generará el mismo error.
Debería llamar a async/await cuando es asíncrono desde la prueba.
describe("Profile Tab Exists and Clickable: /settings/user", () => { test(`Assert that you can click the profile tab`, async (done) => { await page.waitForSelector(PROFILE.TAB); await page.click(PROFILE.TAB); done(); }, 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 al it . Es decir, it('runs slow', () => {...}, 9999)
Puede cambiar el valor predeterminado usando jest.setTimeout . Para hacer esto:
// Configuration "setupFilesAfterEnv": [ // NOT setupFiles "./src/jest/defaultTimeout.js" ],y
// File: src/jest/defaultTimeout.js /* Global jest */ jest.setTimeout(1000) Como otros han señalado, y no está directamente relacionado con esto, no es necesario done con el enfoque async/await.