Node.js Le test asynchrone Mocha ne renvoie pas de rappels

Je ne comprends vraiment pas comment encapsuler des rappels asynchrones nesteds dans un test Mocha. Voici l’exemple de code incriminé: Amazon S3 est appelé pour vérifier que des fichiers existent:

var should = require('should'); var appConfig = require("../config.js"); var fs = require('fs'); var async = require('async'); var s3 = require('aws2js').load('s3', appConfig.awsAccessKeyId, appConfig.awsSecretAccessKey); s3.setBucket(appConfig.awsBucketName); var test_user_id = 590170571; var user_file_code = test_user_id * 2; var output_file_template = ['wordcloud_r', 'polarity_r', 'emot_cat_r']; describe('Should show uploaded files to amazon s3', function () { it.only('should upload three local graphics files to Amazon S3 bucket', function (done) { async.each(output_file_template, function (test_file, cb) { console.log(test_file); s3.head('reports/dsfsdf.dff', function (err, res) { if (err) { console.log(err) } console.log(res) cb(null); // done(); //nope }); // done(); //nope }); // done(); //nope }); }); 

Soit le code se bloque en attente de terminer (si j’omets done ()) – ou le code se termine sans rappel, ou, node se plaint du fait que done () a été appelé plusieurs fois.

Avec l’aide ci-dessous, je l’ai en quelque sorte fait fonctionner, mais cela ressemble à du ragoût vaudou asynchrone

  it.only('should upload three local graphics files to Amazon S3 bucket', function (done) { async.series([function (callback) { async.each(output_file_template, function (test_file, cb) { console.log(test_file); s3.head('reports/dsfsdf.dff', function (err, res) { if (err) { console.log(err) } console.log(res) cb(); callback(); }); }); }, function (callback) { done(); callback(); }]); }); 

Essayez d’utiliser async.serial. Dans la première entrée, utilisez async.each pour parcourir plusieurs boucles. Dans la deuxième entrée, mettez done ().

Vous devez utiliser le support asynchrone dans Mocha. Essayez d’append done à la ligne suivante:

 describe('Should show uploaded files to amazon s3', function (done) { 

et vous devez append done() sous le console.log(res) .

La documentation est ici: http://visionmedia.github.io/mocha/#asynchronous-code