我正在尝试测试一个能够实现这样的承诺的函数
{
state: 'fulfilled'
value:[Array]
}
function register (foo) {
return new Promise((resolve,reject)=>{
query = "INSERT IGNORE INTO....";
connection.query(query, [foo.value.from, foo.value.id], (err, res, fields) => {
if(err){
return undefined //this will change
}
return foo
})
})
}
事情是我回来了,不拒绝也没有解决。所以当我测试..
it('insertion error', function () {
var res = 'error'
connection = {
query: (query, input, cb) =>{
return cb(res, null, null)
}
}
let database = proxyquire('path/to',{
'./connection': connection
})
var input =
{
value: {
id: 'bar',
data: [],
from: 'foo'
}}
return database.register(input)
.then( (result) => {
expect(result).to.be.undefined
})
.catch( (err) => {
console.log(err)
err = new Error (`Test fail: ${err}`)
throw err;
})
})
该功能运作良好,我很确定。 我确定的另一件事是THEN / CATCH条件永远不会出现。我知道如果我替换它将显示的返回,但我需要返回。
我应该修改什么,或者我应该如何测试它。
答案 0 :(得分:1)
这是一个基本的例子,你如何制作一个promisse,在这个例子中你可以在register()函数中发送true或false。
function register ( foo ) {
return new Promise( (resolve, reject) =>{
if(foo){
resolve('Done');
}else{
reject('Error')
}
} )
}
register(false).then( result=>{
document.write('promisse success... ', result);
} ).catch( error => {
document.write('promisse error... ', error);
} )