Sinon.JS的假收益如何工作?

时间:2018-08-29 19:22:09

标签: node.js sinon

我刚刚开始研究Sinon.JS,经过一番研究,我坚持使用以下两种方法,但不知道它们的工作原理:

sinon.fake.yields(callback[, value1, ..., valueN]);

sinon.fake.yieldsAsync(callback[, value1, ..., valueN]);

如果有人解释(甚至显示一些示例)它们如何工作以及何时应使用它们,那将是很棒的。一个更重要的问题是,伪造品,存根和模拟品之间的共同点是什么?

谢谢!

1 个答案:

答案 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()将会失败。