J'essaie de semer la base de données pour le test unitaire.
Voici le fichier seed.js
:
.......
const app = require('./app')
const db = app.get('db')
const saveUsersToDB = (done) => {
db.User.bulkCreate(users)
.then(() => (done))
}
module.exports = {saveUsersToDB};
Mon fichier app.test.js
:
.......
const expect = require('expect')
const request = require('supertest')
const {saveUsersToDB} = require('./seed/seed');
before(saveUsersToDB)
Lorsque j'exécute le test ci-dessous, l'erreur que j'obtiens:
Express listening on port 3000!
1) "before all" hook: saveUsersToDB
0 passing (2s)
1 failing
1) "before all" hook: saveUsersToDB:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
npm ERR! Test failed. See above for more details.
Je pensais que retourner .then(() => (done))
était suffisant? Qu'est-ce que je fais mal?
Car (done)
retournera en fait la fonction au lieu de l'invoquer. Pour appeler done
, vous devez l'écrire de cette façon.
.then(() => done())
Cependant, je ne recommande pas d'utiliser done
avec des promesses. Il vous suffit de renvoyer la promesse, puis mocha
la traitera automatiquement.
const saveUsersToDB = () => db.User.bulkCreate(users)
Par défaut, les tests mocha ont un délai d'attente de 2 secondes (ce qui signifie que le test doit être terminé en 2 secondes).
Vous pouvez augmenter (en millisecondes) comme suit:
this.timeout(5000); // this test can take up to 5 seconds
J'ai eu la même chose. Cette erreur se produit car le délai d'attente de 2 secondes, donc si votre test doit se connecter à ddbb, il le dépassera sans aucun doute.
Ce que j'ai fait, c'est de séparer tous mes tests qui nécessitaient une sorte de connexion à des ressources externes dans mon dossier de tests d'intégration, puis j'ai ajouté l'indicateur suivant dans mon package.json
script de test:
"int-test": "mocha --timeout 15000 tests/integration/**/*.test.js --compilers js:babel-register "
Suivez ce lien pour d'autres façons d'augmenter le délai: délai mocha