我遇到了如何使用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();
}
我的誓言永远不会失败。这是我第一次尝试使用誓言测试承诺。希望熟悉这一点的人能伸出援助之手。
事先,谢谢。
恩里克
答案 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
}
},
})