Je commence par des tests dans Node. Utilisation de mocha, chai et nock (pour intercepter les appels externes HTTP api).
J'ai écrit 3 tests, tous sont une réussite, cependant, lorsque j'ai ajouté le 3ème test, mocha a cessé de sortir après l'exécution des tests, sans erreur ni indication de problème.
Si je commente le 3ème test, moka sort très bien.
C'est le test à l'origine du "problème":
describe('tokenizer.processFile(req, \'tokenize\')', () => {
it('should tokenize a file', async () => {
req = {
file: {
originalname: 'randomcards.txt',
buffer: cardsFile_buffer
},
user: {
displayName: user
}
};
expect(Buffer.from(await tokenizer.processFile(req, 'tokenize'))).to.deep.equal(tokensFile_buffer);
});
});
Encore une fois, ce test est une réussite, ce qui me déconcerte.
Voici le code de tokenizer.processFile:
processFile: function(req, whatTo){
combinedLogger.info(`Request to ${whatTo} ${req.file.originalname} received. Made by: ${req.user.displayName}`);
return new Promise(function(resolve, reject){
const lines = [], responses = [];
const lineReader = require('readline').createInterface({
input: require('streamifier').createReadStream(req.file.buffer)
});
lineReader.on('line', line => {
lines.Push(line);
});
lineReader.on('close', async () => {
//process every line sequentially
try {
//ensure DB connected to mass insert
await db_instance.get_pool();
for(const line of lines) {
var response;
req.current_value = line;
if (whatTo == 'tokenize'){
response = await Tokenize(line);
db_instance.insertAction(req, 'tokenize', response);
}
else if (whatTo == 'detokenize'){
combinedLogger.info(`Request to detokenize ${line} received. Made by: ${req.user.displayName}`);
response = await Detokenize(line);
db_instance.insertAction(req, 'detokenize', line);
}
responses.Push(response);
}
resolve(responses.join("\r\n"));
}
catch(error){
reject(error);
}
});
});
}
Les fonctions Tokenize (valeur) et Detokenize (valeur) sont également appelées dans les 2 autres tests, qui lors de l'exécution, mocha se termine très bien.
Une idée de ce qui cause ça?
Version moka: 5.1.1
Je sais qu'il est un peu tard pour répondre à cette question, mais j'étais confronté à un problème similaire et j'ai vu votre message.
Dans mocha 4.0.0, ils ont changé le comportement des tests sur la finalisation. De ici :
Si le processus mocha est toujours actif après que vos tests semblent "terminés", alors vos tests ont planifié quelque chose (asynchrone) et ne se sont pas nettoyés correctement après eux-mêmes. Avez-vous laissé une prise ouverte?
Dans votre cas, il semble qu'un appel à createReadStream()
n'ait jamais été fermé.
Donc, vous avez 2 options:
Option A: Fermez les fs et autres flux ouverts (recommandé)
Option B: Exécutez mocha avec le --exit
option.