0

API 呼び出しの一部をテストする自動化スクリプトを作成しようとしていますが、簡単な例を次に示します。

async.series([
    function(callback){
       func.clean_database()
       callback(null);     
    },
    function(callback){
       func.register_and_auth(users[0])
       callback(null);   
    }
],
function(err, results){
    console.log('done');
});

クリーンなデータベースは次のように単純に見えます。

clean_database: function () { 
    var Projects = mongoose.model("Projects", new mongoose.Schema({}));
    Projects.collection.remove(function (err, results) { console.log("Emptied: Projects"); });
    return true;
},

問題は、データベースのクリーニングが完了する前に register_and_auth(users[0]) が実行されることです。したがって、ユーザーが既に登録されていることがわかります。私は async.series がこれらを順番に、つまり次々に実行するという印象を受けました。

コールバック(null)が最初のステップで実行している関数の完了に関連付けられるようにするにはどうすればよいですか?

ありがとう!

::::アップデート::::

誰かが気になる場合は、これを拡張し、ユーザー フローを模倣するためにさらに多くのメソッドを呼び出す必要がありました。最終的には次のようになります。これを改善したい場合は、

async.series([    
  func.clean_database, function(one_callback){
    func.register_and_auth(users[0], function(callback) {
      console.log('-- Starting Create and Upload');
      func.auth_and_create_project_and_upload(users[0], data, function(callback) { 
        console.log('-- Starting Annotations');
        func.auth_open_project_add_annotations_to_all_pages(users[0], annotation, function(callback) { 
          console.log('-- Done with User 0.');
          one_callback();
        });
      });
    });
  },
  function(two_callback) {
    func.register_and_auth(users[1], function(callback) {
      console.log('-- Starting Create and Upload');
      func.auth_and_create_project_and_upload(users[1], data, function(callback) { 
        console.log('-- Starting Annotations');
        func.auth_open_project_add_annotations_to_all_pages(users[1], annotation, function(callback) { 
            console.log('-- Done with User 1.');
            two_callback();
          });
        });
      });
    },
  ],
  function(err, results){
  console.log('Load test complete for two users.');   
});
4

1 に答える 1

1

タスクが完了したら、コールバックを渡して呼び出す必要があります

async.series([
    func.clean_database,
    function(callback){
       func.register_and_auth(users[0], callback);
    }
],
function(err, results){
    console.log('done');
});

clean_database: function (callback) { 
    var Projects = mongoose.model("Projects", new mongoose.Schema({}));
    Projects.collection.remove(function (err, results) { 
      console.log("Emptied: Projects"); 
      callback(err, results);
    });
    return true;
},
于 2013-03-27T17:49:57.130 に答える