如何在 Sinon 中模拟链式函数调用
Posted
技术标签:
【中文标题】如何在 Sinon 中模拟链式函数调用【英文标题】:How to mock a chained function call in Sinon 【发布时间】:2021-12-17 09:38:18 【问题描述】:你如何使用这样的诗乃模拟?
const data = await getData();
const res= await data.collection('myCollection').deleteOne( id: 12 );
【问题讨论】:
怎么样:jsfiddle.net/76484/59up8qdr? 谢谢。但是如何检查是否调用了方法 updatedone? 你如何检查是否实际调用了 deleteone? 有间谍!见:jsfiddle.net/76484/1dgnyju8 这能回答你的问题吗? ***.com/questions/37948135/… 【参考方案1】:您可能正在寻找.returnsThis()
,它只返回函数的this
,就像这样的流式API 所做的那样,并且专门用于存根此类API。
你可以这样使用它:
const db = require('...')
async function test()
// Setup
const fakeResponse =
collection: Sinon.stub().returnsThis(),
deleteOne: Sinon.stub().returnsThis()
Sinon.stub(db, 'getData').resolves(fakeResponse)
// Call your code that does stuff
const data = await db.getData();
const res = await data.collection('myCollection').deleteOne( id: 12 )
// Assert
Sinon.assert.calledWith(fakeResponse.collection, 'myCollection')
Sinon.assert.calledWith(fakeResponse.deleteOne, id: 12 )
我在这里假设getData
是某个对象的方法,比如db
。如果没有,您将不得不想出其他方法来存根 getData()
。
【讨论】:
以上是关于如何在 Sinon 中模拟链式函数调用的主要内容,如果未能解决你的问题,请参考以下文章