【发布时间】:2018-02-07 19:58:29
【问题描述】:
我正在尝试测试一个接收这样的承诺的函数
{
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 条件永远不会出现。我知道如果我更换退货以解决它会出现,但我需要被退回。
我应该修改什么,或者我应该如何测试它。
【问题讨论】:
-
没有。修好它。未解决或拒绝的承诺被破坏。功能不好用。
-
为什么你认为你“需要它被退回”?
-
该功能运行良好,正如我所说,它正在收到一个承诺。当您收到一个承诺,并且您没有解决或拒绝它时,只是返回一些东西,它将把那个“东西”替换到值字段中
-
@JulianMendez 好吧,不,这不是承诺的工作方式。
new Promise执行器回调的返回值被忽略,当然你不会从那个返回值但是你试图从connection.query回调返回这是不可能的。 -
@JulianMendez 也许您将此与
then回调混淆了,您可以从中return就好了?
标签: javascript node.js unit-testing