Dans mon application de nœud, j'utilise mocha pour tester mon code. Lors de l'appel de nombreuses fonctions asynchrones à l'aide de mocha, j'obtiens une erreur de temporisation ( Error: timeout of 2000ms exceeded.
). Comment puis-je résoudre ça?
var module = require('../lib/myModule');
var should = require('chai').should();
describe('Testing Module', function() {
it('Save Data', function(done) {
this.timeout(15000);
var data = {
a: 'aa',
b: 'bb'
};
module.save(data, function(err, res) {
should.not.exist(err);
done();
});
});
it('Get Data By Id', function(done) {
var id = "28ca9";
module.get(id, function(err, res) {
console.log(res);
should.not.exist(err);
done();
});
});
});
Réponses:
Vous pouvez soit définir le délai d'expiration lors de l'exécution de votre test:
Ou vous pouvez définir le délai d'expiration pour chaque suite ou chaque test par programme:
Pour plus d'informations, consultez la documentation .
la source
-t
. si vous utilisez mocha-test pour exécuter mocha à partir de la tâche grunt, cela est également pris en charge dans l'objet optionsoptions:{timeout:15000}
.TypeError: this.timeout is not a function
lors de l'utilisation"mocha": "^3.5.0"
Je trouve que la "solution" consistant simplement à augmenter les délais d'attente obscurcit ce qui se passe réellement ici, qui est soit
Vous rencontrez généralement # 2 lorsque Mocha ne reçoit pas d'erreurs d'assertion d'un rappel. Cela est dû à un autre code avalant l'exception plus haut dans la pile. La bonne façon de résoudre ce problème est de corriger le code et de ne pas avaler l'erreur .
Quand le code externe avale vos erreurs
Dans le cas où il s'agit d'une fonction de bibliothèque que vous ne pouvez pas modifier, vous devez intercepter l'erreur d'assertion et la transmettre vous-même à Mocha. Pour ce faire, vous encapsulez votre rappel d'assertion dans un bloc try / catch et passez toutes les exceptions au gestionnaire done.
Ce passe-partout peut bien sûr être extrait dans une fonction d'utilité pour rendre le test un peu plus agréable à l'œil:
Accélérer les tests de réseau
En dehors de cela, je vous suggère de suivre les conseils pour commencer à utiliser des talons de test pour les appels réseau pour faire passer les tests sans avoir à compter sur un réseau qui fonctionne. En utilisant Mocha, Chai et Sinon, les tests pourraient ressembler à ceci
Voir les
nise
documents de Sinon pour plus d'informations.la source
done()
à la fin de la promesse et je me moque déjà des appels réseau en utilisant Angular's$httpBackend
, mais pas de chance. Envelopper chaque spécification avec un try-catch ne semble pas très pragmatique. D'autres suggestions? Merci!try.... catch...
travaux autour du bogue dans le code en cours de test plutôt que de fixer elle.Un peu tard mais quelqu'un peut l'utiliser à l'avenir ... Vous pouvez augmenter votre délai de test en mettant à jour les scripts dans votre package.json avec ce qui suit:
"scripts": { "test": "test --timeout 10000" //Adjust to a value you need }
Exécutez vos tests à l'aide de la commande
test
la source
Si vous utilisez les fonctions fléchées:
la source
Pour moi, le problème était en fait la fonction de description, qui, lorsqu'elle est fournie avec une fonction de flèche, fait que le moka manque le délai d'attente et ne se comporte pas de manière cohérente. (Utilisation d'ES6)
comme aucune promesse n'a été rejetée, j'obtenais cette erreur tout le temps pour différents tests qui échouaient dans le bloc de description
donc à quoi cela ressemble quand il ne fonctionne pas correctement:
et cela fonctionne en utilisant la fonction anonyme
J'espère que cela aide quelqu'un, ma configuration pour ce qui précède: (nodejs: 8.4.0, npm: 5.3.0, mocha: 3.3.0)
la source
Mon problème ne renvoyait pas la réponse, elle était donc suspendue. Si vous utilisez express, assurez-vous que res.send (données), res.json (données) ou quelle que soit la méthode api que vous souhaitez utiliser est exécutée pour l'itinéraire que vous testez.
la source
Assurez-vous de résoudre / rejeter les promesses utilisées dans les cas de test, que ce soit des espions ou des talons, assurez-vous qu'ils résolvent / rejettent.
la source