J'ai ce test de nodejs lors du test, j'obtiens une erreur de fonction done non déclarée.
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
Mon code de test est le suivant: le rappel est fait, mais l'erreur d'appeler le done();
reste
it('remove existing subdocument', (done) => {
const Vic = new User({
name: 'Vic',
posts: [{ title: 'Leaning Nodejs' }]
});
vic.save()
.then(() => User.findOne({ name: 'Vic' }))
.then((user) => {
const post = user.posts[0];
post.remove();
return user.save();
})
.then(() => User.findOne({ name: 'Vic' }))
.then((user) => {
assert(user.posts.length === 0);
done();
});
});
Je faisais face au même problème, le lien de @ MFAL dans le commentaire a aidé. Je développe sur elle.
En cas d'erreur/d'assertion incorrecte, une erreur est générée dans la promesse. Cela conduit à une promesse de rejet. Une fois rejetée, done n'est jamais appelée et le rapport mocha expire ..__ J'ai résolu ce problème en écrivant un bloc .catch
et en l'enchainant avec la promesse
it('resolves', (done) => {
fooAsyncPromise(arg1, arg2).then((res, body) => {
expect(res.statusCode).equal(incorrectValue);
done();
}).catch(done);
});
Les autres moyens mentionnés dans le blog de Wietse sont:
Pour chaîner une then(done, done)
qui gère à la fois la résolution et le rejet de la promesse.
it('resolves', (done) => {
resolvingPromise.then( (result) => {
expect(result).to.equal('promise resolved');
}).then(done, done);
});
Renvoyer une promesse:
it('resolves', () => {
return resolvingPromise.then( (result) => {
expect(result).to.equal('promise resolved');
});
});
Utilisez async/wait:
it('assertion success', async () => {
const result = await resolvingPromise;
expect(result).to.equal('promise resolved');
});
Je connais une façon laide de le faire, simplement en augmentant le délai d’exécution par défaut de Mocha de2 secondes à 10 secondesceci peut être effectué en ajoutant un indicateur - timeout 10000 dans les scripts de test i.e -
package.json
"scripts": {
"start": "SET NODE_ENV=dev && node server.js",
"test": "mocha --timeout 10000"
}
L'idée est d'augmenter le délai d'attente.
Une autre façon est de le faire uniquement avec la méthode requise:
it('remove existing subdocument', function(done) {
this.timeout(10000);
//your code is here
done();
});
Cela m'aide à résoudre le problème.