【问题标题】:Mocha / Chai - Timeout, ensuring promise resolvesMocha / Chai - 超时,确保承诺解决
【发布时间】:2018-11-26 08:33:33
【问题描述】:

对此有数千个问题,我想我已经阅读了所有这些问题,但我仍然不明白为什么以下内容不起作用。

此代码在本地执行没有问题。在 TravisCI 上运行时 - 它失败并确保 done() 被称为错误。

it('Function oLab.GetObjects & oLab.Deploy', (done) => {
    var l = new oLab('1')
    l.getObjects().then(function(data){
        console.log(data);
        expect(data.length).to.above(0);
        //There is a bunch of other code in here commented out since this alone doesn't work.  
    })
    .then(() => done(), done)
    .catch(function (err) {     }); // Not executed
});

我知道 getObjects 函数失败了:

this.getObjects = function () {
    console.log("oLab getObjects function");
    return getResources(this.id);
}

调用getResources:

function getResources(labID){
    return db.any('select * from lab_resources where lab_id = ' + labID).then(function(data){
        var resources = [];
        //Modifies the resources and returns the list.  Logging this displays the correct data.  
        return resources;
    })
    .catch(function (err) {     }); // Not executed

}

问题:

  1. 我阅读了这个blog 并基于它添加(完成)到我的函数中,因为我认为我返回了一个承诺。如果它是嵌套的,我会返回一个承诺吗? IE 我调用getObjects 后跟getResources。 getResources 返回一个数据库查询,但在其中 - 有一个返回值。这是否意味着我正在向调用函数返回一个承诺或值?我认为它会返回承诺,因为承诺不会立即执行。
  2. 在 getObjects 中,我正在尝试设置 oLab 的属性。我应该在 getObjects 函数中设置该属性,还是应该将其返回给我的调用方法,然后更改 oLab 的属性?

【问题讨论】:

  • 让其他人阅读这应该是一个很好的提醒,为什么您应该为测试提供良好的描述性名称。我无法告诉您使用“函数 oLab.GetObjects & oLab.Deploy”在这里测试什么。使用catchthen 的第二个回调可能是一个错误,因为您将拦截失败测试产生的错误。
  • @MarkMeyer 我已经记录了两个 catch 语句,但它们都没有记录,因此我认为它们没有执行以及为什么我将它们关闭。我写了一个更复杂的测试,我已经把它简化了,因为它仍然没有通过 TravisCI 中的基本测试。如果我捕获并记录了内部函数的错误,为什么嵌套 catch 语句是个坏主意?
  • 您在thenthen(done, done) 中使用了两个回调第二个回调是针对错误。除非您在第二次回电catch() 中抛出,否则永远不会发生。使用 mocha 更容易将 done 排除在外,然后返回承诺。
  • @MarkMeyer 我可以理解返回承诺的理由,但是当返回 l.getObjects() - 它超时,这就是我转向完成的原因。我知道 l.getObjects 返回一个承诺,就好像我将 l.getObjects 设置为一个变量并记录它一样,它显示了承诺。我从直接返回承诺开始,然后转向 done(),因为我无法让它工作。
  • 您需要确保从it('Function oLab.GetObjects & oLab.Deploy', (done) 中删除done。这就是它知道寻找承诺的方式。

标签: javascript node.js mocha.js chai


【解决方案1】:

原来 Travis CI 无法访问我请求的数据库,因此它在数据库连接设置上失败了。

【讨论】:

    猜你喜欢
    • 2019-08-21
    • 2018-03-18
    • 2021-05-15
    • 2018-05-25
    • 2017-12-29
    • 2018-06-01
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    相关资源
    最近更新 更多