Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript sinon';你怎么办?_Javascript_Sinon - Fatal编程技术网

Javascript sinon';你怎么办?

Javascript sinon';你怎么办?,javascript,sinon,Javascript,Sinon,sinon的文档中说stub.yields实现了以下功能: 存根收益率([arg1,arg2,…]),类似于callsArg 使存根调用它使用 提供的参数(如果有) 如果一个方法接受多个回调,则需要使用 yieldsRight调用最后一次回调,或callsArg调用存根 调用第一个或最后一个回调以外的其他回调 我已经读了好几遍了,不明白它想传达什么。我发现粗体部分特别令人困惑 对我有帮助的是一个比这更详细的解释,以及一两个演示如何使用的示例(文档中没有提供) 如果要存根的函数接受回调,如异步数据

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
)来处理多个回调。