Javascript sinon';你怎么办?
sinon的文档中说stub.yields实现了以下功能: 存根收益率([arg1,arg2,…]),类似于callsArg 使存根调用它使用 提供的参数(如果有) 如果一个方法接受多个回调,则需要使用 yieldsRight调用最后一次回调,或callsArg调用存根 调用第一个或最后一个回调以外的其他回调 我已经读了好几遍了,不明白它想传达什么。我发现粗体部分特别令人困惑Javascript sinon';你怎么办?,javascript,sinon,Javascript,Sinon,sinon的文档中说stub.yields实现了以下功能: 存根收益率([arg1,arg2,…]),类似于callsArg 使存根调用它使用 提供的参数(如果有) 如果一个方法接受多个回调,则需要使用 yieldsRight调用最后一次回调,或callsArg调用存根 调用第一个或最后一个回调以外的其他回调 我已经读了好几遍了,不明白它想传达什么。我发现粗体部分特别令人困惑 对我有帮助的是一个比这更详细的解释,以及一两个演示如何使用的示例(文档中没有提供) 如果要存根的函数接受回调,如异步数据
对我有帮助的是一个比这更详细的解释,以及一两个演示如何使用
的示例(文档中没有提供) 如果要存根的函数接受回调,如异步数据库请求,这允许存根伪造函数通常传递给回调的结果
举个例子可能更容易:
//模拟db api
设db={
获取(查询,cb){
cb(null,“您的查询结果”)
}
}
函数runQuery(q){
db.get(q,(err,val)=>{
if(err)console.log(“error!”,err)
else console.log(“值:”,val)
})
}
//正常地说
runQuery(“一些查询”)
//使用DB-get方法
设stub=sinon.stub(db,'get');
//伪造查询结果
存根收益率(空,“来自Sinon存根的结果”)
//现在存根
runQuery(“一些查询”)
//断言“runQuery”做了它应该做的事情
//给定值`来自Sinon存根的结果`
//从db.get
//查看它如何处理错误:
存根收益率(“某些错误”)
runQuery(“一些查询”)
//断言“runQuery”做了它应该做的事情
//当数据库错误与“某些错误”同时出现时
我被存根收益率(null,“来自Sinon存根的结果”)弄糊涂了
。我认为这是调用db.get
的第二个参数((err,val)=>{…
),其中null
和“来自Sinon存根的结果”
,但让我困惑的是它如何知道调用第二个参数而不是第一个参数。如果在db.get
的签名中有两个回调怎么办?比如,如果db.get
的签名是这样的:db.get(q,(err,val)=>{},b,(err,val)=>{}
它只是调用它找到的第一个回调吗?@DanielKaplan这就是为什么他们指定这“导致存根调用第一个回调”。它将所有内容传递给第一个回调。db.get()
接受两个参数-第一个参数为null,除非有错误。这很容易是最常见的模式。还有其他方法可以调用最后一个回调.yieldsRight()
或stub.yield()
(不带s
)来处理多个回调。