Mocha テストでネストされた非同期コールバックをラップする方法について、私は完全に混乱しています。問題のあるコードサンプルは次のとおりです。ファイルが存在することを確認するために Amazon S3 を呼び出しています。
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
});
});
コードが完了するのを待ってハングアップするか ( done() を省略した場合)、コードがコールバックなしで完了するか、ノードが done() が複数回呼び出されたことを訴えます。
以下の助けを借りて、私はそれを機能させましたが、非同期ブードゥーシチューのように見えます
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();
}]);
});