Spec-Zone.ru › Sinon.JS 8

Мошенничество

Введение

fake доступен в Sinon с версии 5 и выше. Он позволяет создавать fake Function с возможностью установить поведение по умолчанию поведение. Установите поведение с помощью Functions с тем же API, что и в sinon.stub. Созданное fake Function, с поведением или без него, имеет тот же API, что и (sinon.spy)шпионы.

В Sinon, fake является Function, который записывает аргументы, возвращаемое значение, значение this и сгенерированную исключение (если таковое имеется) для всех своих вызовов.

Мошенничество неизменяемо: после создания поведение не изменится.

В отличие от sinon.spy и sinon.stub методов, API sinon.fake знает только как создавать подделки, и не заботится о их подключении к тестируемой системе. Для подключения подделок к тестируемой системе, вы можете использовать методы sinon.replace*.

Создание подделки

Создайте fake Function с поведением или без него. Созданная Function имеет тот же API, что и sinon.spy.

Создание подделки без поведения

// create a basic fake, with no behavior
var fake = sinon.fake();

fake();
// undefined

fake.callCount;
// 1

Создание подделки с пользовательским поведением

// create a fake that returns the text "foo"
var fake = sinon.fake.returns('foo');

fake()
// foo

Подделки с поведением

Подделки не могут быть изменены после создания с поведением.

sinon.fake.returns(value);

Создает подделку, которая возвращает аргумент value.

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

fake();
// apple pie

sinon.fake.throws(value);

Создает подделку, которая вызывает исключение Error со значением в качестве свойства message.

Если в качестве аргумента Error передается value, то это будет значение, сгенерированное исключением. Если передается любое другое значение, то оно будет использоваться для свойства message сгенерированного исключения Error.

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

fake();
// Error: not apple pie

sinon.fake.resolves(value);

Создает подделку, которая возвращает выполненную Promise для переданного значения.

sinon.fake.rejects(value);

Создает подделку, которая возвращает отклоненную Promise для переданного значения.

Если в качестве аргумента Error передается value, то это будет значение обещания. Если передается любое другое значение, то оно будет использоваться для свойства message обещания Error.

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

sinon.fake.yields принимает некоторые значения и возвращает функцию, которая при вызове ожидает последним аргументом функцию обратного вызова и вызывает эту функцию обратного вызова с теми же ранее заданными значениями. Возвращаемая функция обычно используется для имитации функции службы, которая принимает функцию обратного вызова в качестве последнего аргумента.

В примере кода ниже функция «readFile» модуля «fs» заменяется поддельной функцией, созданной с помощью sinon.fake.yields. Когда вызывается поддельная функция, она всегда вызывает последний аргумент, который она получила, который ожидается как функция обратного вызова, со значениями, которые функция yields ранее приняла.

var fake = sinon.fake.yields(null, 'file content');
sinon.replace(fs, 'readFile', fake);
fs.readFile('somefile',(err,data)=>{console.log(data);});
console.log('end of this event loop');
// file content
// end of this event loop

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

Аналогично yields, yieldsAsync также возвращает функцию, которая при вызове ожидает последний аргумент в виде функции обратного вызова и вызывает ее с теми же ранее заданными значениями. Однако возвращаемая функция вызывает эту функцию обратного вызова асинхронно, а не сразу, т.е. в следующей цикле обработки событий.

Сравните выходной результат примера кода ниже с выходным результатом примера кода выше для yields чтобы увидеть разницу.

var fakeAsync = sinon.fake.yieldsAsync(null, 'file content');
sinon.replace(fs, 'readFile', fakeAsync);
fs.readFile('somefile',(err,data)=>{console.log(data);});
console.log('end of this event loop');
// end of this event loop
// file content

sinon.fake(func);

Оборачивает существующую Function для записи всех взаимодействий, оставляя за func предоставление поведения.

Созданная fake Function имеет тот же API, что и sinon.spy.

Это полезно, когда требуется сложное поведение, не охваченное методами sinon.fake.*, или при обертке существующей функции или метода.

Свойства экземпляра

Свойства экземпляра такие же, как у sinon.spy.

f.callback

Это свойство — способ получения ссылки на последнюю функцию обратного вызова, переданную в последнем вызове подделки.

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

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

f.callback === cb2;
// true

Такая же удобная возможность добавлена к вызовам шпионов:

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

f.lastArg

Это свойство — удобный способ получения ссылки на последний аргумент, переданный в последний вызов подделки.

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

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

f.lastArg === date2;
// true

Такая же удобная возможность добавлена к вызовам шпионов:

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

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

Добавление подделки в тестируемую систему

В отличие от sinon.spy и 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();

© 2010–2020 Christian Johansen
Licensed under the BSD License.
https://sinonjs.org/releases/v8.1.1/fakes

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API