用摩卡测试异步瀑布似乎停滞不前

时间:2015-02-13 11:39:50

标签: javascript node.js asynchronous mocha

我正在尝试向我所拥有的节点模块添加一些mocha测试,但我是新手,而且我在回调方面缺乏具体性,这阻碍了我。 我试图将事情简化为最简单的例子,但它仍然没有用。

所以我的main.js

var async = require('async');
var myObject = {};

myObject.test = function(params) {
   async.waterfall([
         async.apply(test, params)
      ],
      function(err, result){
         if (err) {
            console.log('Error: ' + err);
         } else {
            if (result === 200) {
               return result;
            }
         }
      });
};


function test(params, callback) {

   if(params) {
      callback(null, 200);
   }
}

module.exports = myObject;

然后我的测试文件

var assert = require("assert");
var myObject = require('./main');

describe('test', function(){
   it("should return 200", function(done){
      myObject.test({test: 'such test'}, function(err, res) {
         if (err) return done(err);
         assert.equal(res, 200);
         done(res);
      });
   })
});

如果我只是运行mocha它会超时,所以我对此表示怀疑!尝试mocha --timeout 15000也只是停滞不前。你能提供的任何方向都会非常感激!

我使用this answer做到了这一点,但无法继续下去。


好吧,我认为我对它进行了排序,但仍然会感谢一些反馈,看看我是否正确接近它,而不是仅仅让我的测试通过。

var async = require('async');
    var myObject = {};

    myObject.test = function(params, callback) {
       async.waterfall([
             async.apply(test, params)
          ],
          function(err, result){
             if (err) {
                console.log('Error: ' + err);
             } else {
                if (result === 200) {
                   callback(result);
                }
             }
          });
    };


    function test(params, callback) {

       if(params) {
          callback(null, 200);
       }
    }

    module.exports = myObject;

,测试文件是

var assert = require(“assert”);     var myObject = require('./ main');

describe('test', function(){
   it("should return 200", function(done){
      myObject.test({test: 'such test'}, function(res) {
         assert.equal(res, 200);
         done();
      });
   })
});

1 个答案:

答案 0 :(得分:1)

您修复了主要问题,但您的代码仍然存在问题。当你有一个采用回调的异步方法时,必须始终在所有情况下完全调用一次回调,否则你的程序的控制流将会中断。如果编写if/else子句,则两个分支都必须调用回调函数。上述两个if语句都违反了回调合同。查看The Node Way中的understanding error-first-callbacks以获得更好的解释。