J'utilise marionnettiste et plaisante pour faire des tests front-end.
Mes tests ressemblent à ceci:
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);
});
Parfois, lorsque je lance les tests, tout fonctionne comme prévu. D'autres fois, j'obtiens une erreur:
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)
C'est étrange parce que:
J'ai spécifié le délai d'attente à 30000
Que je reçoive ou non cette erreur est apparemment très aléatoire
Quelqu'un peut-il deviner pourquoi cela se produit?
Par conséquent, le délai d'attente que vous spécifiez ici doit être plus court que le délai d'attente par défaut.
Le délai d'attente par défaut est 5000
et le cadre par défaut est jasmine
dans le cas de jest
. Vous pouvez spécifier le délai d'expiration à l'intérieur du test en ajoutant
jest.setTimeout(30000);
Mais cela serait spécifique au test. Ou vous pouvez configurer le fichier de configuration pour le framework.
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)
Voir ce fil aussi
Il devrait appeler la fonction done quand il est asynchrone du test.
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 réponse à cette question a changé au fur et à mesure que Jest a évolué. Réponse actuelle (mars 2019):
Vous pouvez remplacer le délai d'expiration d'un test individuel en ajoutant un troisième paramètre à la variable it
. c'est à dire. it('runs slow', () => {...}, 9999)
Vous pouvez changer la valeur par défaut en utilisant jest.setTimeout
. Pour faire ça:
// config
"setupFilesAfterEnv": [ // NOT setupFiles
"./src/jest/defaultTimeout.js"
],
et
// File: src/jest/defaultTimeout.js
/* global jest */
jest.setTimeout(1000)
done
n'est pas nécessaire avec l'approche asynchrone/wait.Je voudrais ajouter (c'est un peu long pour un commentaire) que même avec un délai d'attente de 3000
mes tests échouaient encore parfois (de manière aléatoire) avec
Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.
Grâce à l'excellente réponse de @ Tarun, je pense que le moyen le plus rapide de résoudre de nombreux tests est le suivant:
describe('puppeteer tests', () => {
beforeEach(() => {
jest.setTimeout(10000);
});
test('best jest test fest', async () => {
// blah
});
});
Assurez-vous d'invoquer done();
lors des rappels, sinon le test ne réussira pas.
beforeAll((done /* call it or remove it*/) => {
done(); // calling it
});
S'applique à toutes les autres fonctions ayant un rappel done ().
J'ai récemment rencontré ce problème pour une raison différente: j'effectuais des tests de manière synchrone avec jest -i
, et le délai expirait. Quel que soit le raisonnement, exécuter les mêmes tests avec jest --runInBand
(même si -i
est censé être un alias) ne se termine pas.
Peut-être que cela aidera quelqu'un ¯\_(:/)_/¯
Le problème de délai d'attente se produit lorsque le réseau est lent ou que de nombreux appels réseau sont effectués à l'aide de await
, ces scénarios dépassent le délai d'attente par défaut, c'est-à-dire 5 000 ms. Pour éviter l'erreur de délai d'expiration, augmentez simplement le délai d'expiration des paramètres globaux prenant en charge un délai d'expiration. Une liste des globaux et de leur signature peut être trouvée ici .
Pour Jest 24.9
Pour ceux qui recherchent une explication à propos de jest --runInBand
, vous pouvez consulter la documentation Exécution de marionnettiste dans les environnements CI https: // github.com/smooth-code/jest-puppeteer