使用Nodejs Vows测试Bluebird Promises(BDD)

时间:2014-08-23 19:19:45

标签: node.js promise bluebird vows

我遇到了如何使用Vows为我的Promise返回API正确构建测试的问题,例如

topic:function() { return myfunc() { /* returns a Bluebird Promise */ } },
'this should keep its promise':function(topic) {
    var myfunc = topic;
    myfunc()
        .then(function(result) {
            assert(false);
        })
        .catch(function(error) {
            assert(false);
        })
        .done();
}

我的誓言永远不会失败。这是我第一次尝试使用誓言测试承诺。希望熟悉这一点的人能伸出援助之手。

事先,谢谢。

恩里克

2 个答案:

答案 0 :(得分:2)

由于像Mocha这样的库不同--Vows还没有支持测试promises,我们使用它的常规异步测试格式来进行回调:

topic:function() { return myfunc() { /* returns a Bluebird Promise */ } },
    'this should keep its promise':function(topic) {
    var myfunc = topic;
    myfunc() // call nodeify to turn a promise to a nodeback, we can chain here
        .nodeify(this.callback); // note the this.callback here
}

以下是mocha的外观:

describe("Promises", function(){
   it("topics", function(){
       return myfunc(); // chain here, a rejected promise fails the test.
   });
})

答案 1 :(得分:0)

以下示例使用带有誓言的when js样式承诺。你应该能够适应你正在使用的任何风格的承诺。关键点是:

1)确保在你的诺言结算时调用this.callback。我指定了这个'到下面示例中的变量,以确保在promise解析时它是正确可用的。

2)使用错误对象和结果调用this.callback (参见下面如何使用变量完成)。如果您只是用结果调用它,誓言会将其解释为错误。

  vows.describe('myTests')
  .addBatch({
  'myTopic': {
    topic: function() {
      var vow = this;
      simpleWhenPromise()
        .then(function (result) {
          vow.callback(null, result);
        })
        .catch(function (err) {
          vow.callback(result, null);
        });
    },
    'myTest 1': function(err, result) {
      // Test your result
    }
  },
})