如何为异步瀑布编写Mocha测试

时间:2014-01-17 06:56:29

标签: node.js mocha

我为异步瀑布编写了一个mocha测试用例,“function2”是调用mongodb获取数据的模块,当我尝试在node.js中运行相同的代码时,这个异步代码可以工作,但是当我做mocha测试mongodb的“function2”调用抛出错误说“[错误:无法确定服务器的状态]”。

我必须知道测试快速执行的原因,而不是等待mongodb连接并返回结果。

有人可以建议我如何解决这个问题。提前谢谢。

var function1     = require('../../method1');
var function2 = require('../../method2');
var function3 = require('../../method3');

describe('controller :  ', function () {    

    it('should not return error', function (done) {     
async.waterfall([              
                function(callback){                 
                    function1.method1(app.request, app.response, function(err,result) {  

                      if(err){                    
                        callback(err,null);
                      }
                      else{

                        var var1 = result; 

                       callback(null, var1);
                      }
                    });          
                },              
                function(var1, callback){               
               //Here I have a Mongodb Call               
                   function2.method2(var1,function(err,result) {                    
                      if(err) {                    
                        callback(err,null);
                      }
                      else{
                        var var2= result;

                        var context = {
                            "c1": var1,
                            "c2": var2
                        };

                        callback(null, context);
                      }
                   });
                },
                function(context, callback){
                    function2.method2(context, function(err,result) {
                      if(err){
                        console.error(err);
                        callback(err,null);
                      }
                      else{
                        context.c3 = {};

                        result.forEach(function(e, i) {

                          for(var key in e) {
                              context.c3[key] = e[key];
                          }

                        });

                        callback(null, context);
                      }
                    });        

                },
                function(context, callback){                      
                    should.exist(context);  
                }
            ],          
            function (err, result) {               
               should.not.exist(err);   
               should.exist(result);                     
            });             
    });
});

1 个答案:

答案 0 :(得分:1)

我不确定但是在建立连接(使用你的模块)时会尝试等待。

before(function(done) {
    connection.on('open', done);
});