【问题标题】:How can I pass mochas done callback function to another helper function如何将 mochas done 回调函数传递给另一个辅助函数
【发布时间】:2015-05-20 01:45:44
【问题描述】:

我有一段代码,我将在 mocha 的 then 语句中多次使用它,所以我把它变成了一个函数。但是我还需要在该函数中调用done(),它超出了范围,导致错误未捕获的ReferenceError:未定义完成。这是一个代码sn-p:

var collectionChecker = function(results) {
  expect(Array.isArray(results), 'Did not return collection');
  expect(results.length === numAttr, 'Returned wrong number of models');
  done();
};

test('returns a collection with correct number of models', function(done) {
  attrs.getAttributeTemplates().then(collectionChecker);
});

如何将done() 传递给我的函数?

我通过链接另一个 .then 并在那里调用 done 找到了解决方法,但这似乎是一种丑陋的方法。

【问题讨论】:

    标签: javascript callback promise mocha.js


    【解决方案1】:

    你想多了 - mocha 支持 Promise,你可以返回一个 Promise,如果它被满足,测试就会通过(如果期望抛出它会失败):

    var collectionChecker = function(results) {
      expect(Array.isArray(results), 'Did not return collection');
      expect(results.length === numAttr, 'Returned wrong number of models');
    };
    
    // just add a return, no `done` here or anywhere    
    test('returns a collection with correct number of models', function() {
      return attrs.getAttributeTemplates().then(collectionChecker);
    });
    

    【讨论】:

    • 谢谢!这正是我一直在寻找的。我试图在另一个测试中做类似的事情,但它没有按预期工作。我试图返回一连串的 then 并且它总是评估为 true,尽管最里面的期望成功或失败。关于如何处理这种情况的任何建议?
    • @novacog 如果您有具体案例,请打开一个新问题,我保证看一下。
    猜你喜欢
    • 2021-09-22
    • 2020-01-30
    • 2013-01-16
    • 2011-09-21
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 2011-10-31
    相关资源
    最近更新 更多