我有以下函数调用promise对象
export const project_list = function(data,res){
return db.any(queries.ProjectList)
.then(function(results){
let newResults = project_list_cleaner(results)
res(null,newResults)
})
.catch(function(err){
res(err)
})
}
我试图像下面那样测试功能
it('should retrieve a list',function(){
return expect(project_list(data,res)).to.eventually.be.false
})
这引发了一个错误,因为promise对象实际上并没有返回任何内容。它会执行res
回调。
无论如何都要测试promise对象是否执行回调?
答案 0 :(得分:1)
上述函数返回Promise的事实对于它的签名无关紧要。您将回调传递给它的事实使得Promise不可用。
让你的函数返回一个Promise就是这样。没有涉及回调。
export const project_list = function(data){
return db.any(queries.ProjectList)
.then(function(results){
return project_list_cleaner(results)
});
}
测试将是:
it('should retrieve a list',function(){
return expect(project_list(data)).to.eventually.be.false
})
在这个解决方案中,你不重构函数(但你真的应该!)并且作为Promises从未存在过。
it('should retrieve a list',function(done){
project_list(data, function(err, result){
// put your assertions here
done();
});
})