测试包含嵌套回调的承诺对象
Testing a promise object which contains a nested callback
我有以下调用 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 对象实际上 return 什么都没有。它执行 res
回调。
有没有办法测试promise对象是否执行回调?
上面的函数 return 是 Promise 的事实与其签名无关。您将回调传递给它这一事实使得 Promise 无法使用。
解决方案 1:重构您的函数
让你的函数 return 成为 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
})
解决方案 2:忽略 Promise
在此解决方案中,您无需重构函数(但您确实应该重构!)并按照 Promises 从未存在的方式工作。
it('should retrieve a list',function(done){
project_list(data, function(err, result){
// put your assertions here
done();
});
})
我有以下调用 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 对象实际上 return 什么都没有。它执行 res
回调。
有没有办法测试promise对象是否执行回调?
上面的函数 return 是 Promise 的事实与其签名无关。您将回调传递给它这一事实使得 Promise 无法使用。
解决方案 1:重构您的函数
让你的函数 return 成为 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
})
解决方案 2:忽略 Promise
在此解决方案中,您无需重构函数(但您确实应该重构!)并按照 Promises 从未存在的方式工作。
it('should retrieve a list',function(done){
project_list(data, function(err, result){
// put your assertions here
done();
});
})