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

Testing async waterfall with mocha seems to stall

本文关键字:布似乎 停滞不前 异步 mocha 测试      更新时间:2023-11-08

我正试图在现有的节点模块中添加一些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也只是暂停。如果您能提供任何指导,我们将不胜感激!

我用这个答案走到了这一步,但再也走不动了。


好吧,我想我已经整理好了,但我仍然希望得到一些反馈,看看我是否正确地处理了它,而不仅仅是设法让我的测试通过。

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中的理解错误第一回调,以获得良好的解释。