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

Testing async waterfall with mocha seems to stall

我正在尝试向我拥有的节点模块添加一些 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();
      });
   })
});

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