Javascript 什么';存根和赝品有什么区别?

Javascript 什么';存根和赝品有什么区别?,javascript,unit-testing,sinon,Javascript,Unit Testing,Sinon,Sinon.js提供。但我看不出它们之间有什么本质区别。下面是测试中的示例代码: index.ts: 导出函数main(回调){ 返回回调(); } index.test.ts: 从“sinon”导入sinon; 从“/”导入{main}; 描述('sinon fake vs stub',()=>{ 它('使用sinon存根时应通过',()=>{ const callback=sinon.stub().返回('value'); const-actual=main(回调); sinon.asse

Sinon.js提供。但我看不出它们之间有什么本质区别。下面是测试中的示例代码:

index.ts

导出函数main(回调){ 返回回调(); }
index.test.ts

从“sinon”导入sinon;
从“/”导入{main};
描述('sinon fake vs stub',()=>{
它('使用sinon存根时应通过',()=>{
const callback=sinon.stub().返回('value');
const-actual=main(回调);
sinon.assert.match(实际“值”);
sinon.assert.calledOnce(回调);
});
它('使用sinon伪码时应通过',()=>{
const callback=sinon.false.returns('value');
const-actual=main(回调);
sinon.assert.match(实际“值”);
sinon.assert.calledOnce(回调);
});
});
测试结果:

sinon伪造vs存根
✓ 使用sinon存根时应通过
✓ 使用sinon赝品时应通过
2次通过(9ms)
对于
sinon.false.throws(值)
sinon.fake.resolves(值)
sinon.fake.yields([value1,…,valueN])API等等。我还可以使用
sinon.stubs()
执行这些操作

我经常使用
sinon.stubs()
Fakes的文档
没有给出特殊场景,只能使用赝品。我目前可以使用
sinon.stubs()

测试所有场景,文档中确实说“与
sinon.spy
sinon.stub
方法不同,
sinon.fake
API只知道如何创建假货,而不关心如何将它们插入被测系统”因此,这些伪函数似乎只是函数的伪实现,而存根还包括将它们实际添加到其他对象的选项。不确定这是否完全正确,但这就是我从医生那里得到的感觉。如果stubs真的在引擎盖下使用赝品,我不会感到惊讶。