【发布时间】:2021-06-29 17:05:19
【问题描述】:
此测试通过;即 sinon 说存根实际上是:
const sinon = require('sinon')
async function underTest (s){
promise1 = new Promise((yes, no)=>yes())
promise2 = new Promise((yes, no)=>yes())
Promise.all([promise1, promise2]).then(s.yes).catch(s.no)
}
async function test(){
s = {yes: sinon.stub(), no:sinon.stub()}
await underTest(s)
sinon.assert.called(s.yes)
}
test().then(console.log('done'))
请注意我没有从Promise.all返回承诺。
但是,下面的测试会失败,sinon 会说存根没有被调用:
const sinon = require('sinon')
async function underTest (s){
promise1 = new Promise((yes, no)=>no())
promise2 = new Promise((yes, no)=>no())
Promise.all([promise1, promise2]).then(s.yes).catch(s.no)
}
async function test(){
s = {yes: sinon.stub(), no:sinon.stub()}
await underTest(s)
sinon.assert.called(s.no)
}
test().then(console.log('done'))
如果我返回Promise.all,那么它就会通过,sinon 会说调用了s.no 存根:
const sinon = require('sinon')
async function underTest (s){
promise1 = new Promise((yes, no)=>no())
promise2 = new Promise((yes, no)=>no())
return Promise.all([promise1, promise2]).then(s.yes).catch(s.no)
}
async function test(){
s = {yes: sinon.stub(), no:sinon.stub()}
await underTest(s)
sinon.assert.called(s.no)
}
test().then(console.log('done'))
只有当我从Promise.all 返回承诺时,测试才会通过。如果我什么都不返回,async 函数将解析为undefined,并且可能会或可能不会调用存根。
我的问题是,如果没有 return 语句,即使是第一种情况,我也会预料到测试会失败。我本来希望 sinon 告诉我 s.yes 没有被调用。但是为什么会通过呢?为什么resolve和reject会不一致?
【问题讨论】:
标签: javascript node.js promise sinon