Fakes - Sinon.JS

对https://sinonjs.org/releases/v6.3.4/fakes/的翻译

简介

fake 是从 Sinon V5开始引入的. 它合并了 spiesstubs的概念,从而简化了它们的使用。
在Sinon中, fake is 一个 Function ,它记录了调用它的参数,返回值,this 值和抛出的异常。
你可以选择和不选择创建带有行为;fake可以包装一个已存在的函数。
一个fake是不可变的:一旦创建,它的行为不会改变。
不同于sinon.spysinon.stub 方法, sinon.fake API 只知道如何创建fake,并不关心自己是如何插入到被测试的系统中的。为了将fake插入到测试系统中,你要使用 sinon.replace* 方法.

创建fake

// 创建一个没有behavior的fake
var fake = sinon.fake();

fake();

console.log(fake.callCount);
// 1

带有behavior的fake

可以创建带有behavior的fake, 一旦创建行为就不能修改。

sinon.fake.returns(value);

返回 参数value

var fake = sinon.fake.returns('apple pie');

fake();
// apple pie

sinon.fake.throws(value);

抛出一个给定message属性值的 Error .
传入 Error 将其抛出,传入其他值将其作为抛出异常的message属性值。

var fake = sinon.fake.throws(new Error('not apple pie'));

fake();
// Error: not apple pie

sinon.fake.resolves(value);

生成 fake 返回一个处于resolved状态的 Promise

sinon.fake.rejects(value);

生成 fake 返回一个处于rejectd状态的 Promise。如果一个 Error传递给 value ,那么它会被当作promise的value。如果其他值传入会作为Errormessage

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

fake 希望最后一个参数为回调函数并会用给出的参数调用它。

var fake = sinon.fake.yields('hello world');

fake(console.log);
// hello world

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

fake 希望最后一个参数为回调函数并会用给出的参数调用它。

var fake = sinon.fake.yieldsAsync('hello world');

fake(console.log);
// hello world

sinon.fake(func);

包装一个已存在的函数以记录所有的交互,结束调用时提供行为(while leaving it up to the func to provide the behavior.)。
当所需方法没有被sinon.fake.*提供时,包装一个已存在函数或方法时非常有用的。

实例属性

f.callback

This property is a convenience to easily get a reference to the last callback passed in the last to the fake.
这个属性可以方便的获得传递给fakede 最后一个回调函数的引用。

var f = sinon.fake();
var cb1 = function () {};
var cb2 = function () {};

f(1, 2, 3, cb1);
f(1, 2, 3, cb2);

f.callback === cb2;
// true

spy calls:也被添加到了一样的便利性

f.getCall(1).callback === cb2;
// true
//
f.lastCall.callback === cb2;
// true

f.lastArg

这个属性可以获取最后一个传递给最后一次fake的参数

var f = sinon.fake();
var date1 = new Date();
var date2 = new Date();

f(1, 2, date1);
f(1, 2, date2);

f.lastArg === date2;
// true

spy calls:也有同样的特性

f.getCall(0).lastArg === date1;
// true
f.getCall(1).lastArg === date2;
// true

f.lastCall.lastArg === date2;
// true

把fake添加到被测系统中

不同于 sinon.spy and sinon.stub, sinon.fake 只知道如何创建, 不关心如何替换掉被测系统的相应属性。
为此, 可以使用 sinon.replace 方法.

var fake = sinon.fake.returns('42');

sinon.replace(console, 'log', fake);

console.log('apple pie');
// 42

调用 sinon.restore 方法恢复被插入的属性或方法。

// restores all replaced properties set by sinon methods (replace, spy, stub)
sinon.restore();

你可能感兴趣的:(Fakes - Sinon.JS)