JEST: le rappel Async n'a pas été invoqué dans le délai de 5000ms spécifié par jest.setTimeout
j'utilise puppeteer and jest pour faire des tests avant.
mes tests sont les suivants:
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, quand je fais 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 précisé que le délai d'attente à 30000
si j'obtiens ou non cette erreur est apparemment très aléatoire
quelqu'un Peut-il devinez pourquoi ce qui se passe?
4 réponses
donc le délai que vous spécifiez ici doit être plus court que le délai par défaut.
le délai par défaut est 5000
et le cadre par défaut est jasmine
en cas de jest
. Vous pouvez spécifier le délai à 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 cadre.
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 plus, ce fil
il devrait appeler la fonction done quand il est async de test.
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);
});
je voudrais ajouter (c'est un peu long pour un commentaire) que même avec un délai d'attente de 3000
mes tests échoueraient encore parfois (au hasard) avec
Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.
grâce à la réponse géniale de @Tarun, je pense que le moyen le plus court de corriger beaucoup de tests est:
describe('puppeteer tests', () => {
beforeEach(() => {
jest.setTimeout(10000);
});
test('best jest test fest', async () => {
// blah
});
});
ma solution ici: Mais je ne sais pas s'il correspond à votre code ou non, mais vous pouvez essayer cela.
it('GET should return a status of 200 OK', async (done) => {
await frisby
.get('api-url')
.expect('status', 200)
.done(done)
});