我刚刚开始研究Sinon.JS,经过一番研究,我坚持使用以下两种方法,但不知道它们的工作原理:
sinon.fake.yields(callback[, value1, ..., valueN]);
和
sinon.fake.yieldsAsync(callback[, value1, ..., valueN]);
如果有人解释(甚至显示一些示例)它们如何工作以及何时应使用它们,那将是很棒的。一个更重要的问题是,伪造品,存根和模拟品之间的共同点是什么?
谢谢!
答案 0 :(得分:0)
The Sinon docs解释说yields()
返回一个fake
,它“期望最后一个参数是回调,并将使用给定的参数调用它”。
yieldsAsync()
做同样的事情,但是异步调用回调。
查看Sinon source code可以清楚地知道这意味着什么:
调用sinon.fake.yields(...)
记录传递的参数并返回一个函数。
调用返回的函数时,它将忽略所有其自身的参数,但假定最后一个参数是回调。然后,它使用使用yields()
创建时记录的参数调用该回调:
import * as sinon from 'sinon';
const fake = sinon.fake.yields('arguments', 'passed', 'to', 'yields');
const callback = (...args) => {
console.log(args);
}
// logs the following to the console:
// [ 'arguments', 'passed', 'to', 'yields' ]
fake('every argument', 'except the last', 'is ignored', callback);
yieldsAsync()
除了invokes the callback asynchronously以外,做完全相同的事情。
在Sinon中,间谍“是一个函数,它记录参数,返回值,该函数的值以及对其所有调用抛出的异常(如果有)”。它只是监视对其发出的呼叫。它可以不包装任何东西,也可以包装并透明地传递给现有函数。
存根是“具有预编程行为”的间谍。存根允许您监视对其的调用,还可以定义函数的行为方式(返回值,引发的异常等)。如果将现有函数包装在存根中,则将使用存根定义的行为代替该函数。
“ fake
在Sinon v5中引入。它简化并合并了来自间谍和存根的概念。”它像侦探和存根一样侦听对其进行的调用,可以在有或没有行为的情况下创建它,还可以包装现有函数。
模拟是一种假方法,“具有预编程的行为...以及预编程的期望”。模拟可让您定义函数的行为方式以及期望如何使用它。如果未按预期使用模拟,则在模拟上调用verify()
将会失败。