0

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();
        }]);

    });
4

2 に答える 2

1

async.serial を使用してみてください。最初のエントリ内で、async.each を使用して複数のループを実行します。2 番目のエントリに、done() を入力します。

于 2013-06-17T23:39:31.697 に答える
1

mocha で非同期サポートを使用する必要があります。次の行に done を追加してみてください。

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

done()の下に追加する必要がありますconsole.log(res)

ドキュメントはこちら: http://visionmedia.github.io/mocha/#asynchronous-code

于 2013-06-17T18:00:00.460 に答える