Spec-Zone.ru › Sinon.JS 5

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

Введение

fake была представлена с Sinon с версией 5. Она упрощает и объединяет концепции из spies и stubs.

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

Он может быть создан с поведением или без него; он может обернуть существующую функцию.

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

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

Создание мошенничества

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

fake();

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

Мошенничества с поведением

Мошенничества могут быть созданы с поведением, которое нельзя изменить после создания мошенничества.

sinon.fake.returns(value);

Создаёт мошенничество, которое возвращает аргумент value

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

fake();
// apple pie

sinon.fake.throws(value);

Создаёт мошенничество, которое выбрасывает Error со значением, переданным в качестве свойства message

Если в качестве аргумента value передано Error, тогда это значение будет выброшенным значением. Если передано любое другое значение, оно будет использовано для свойства 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 для переданного значения.

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

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);

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

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

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

Такое же удобство добавлено к [вызовам шпионов][../spy-call]:

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

Такое же удобство добавлено к [вызовам шпионов][../spy-call]:

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–2018 Christian Johansen
Licensed under the BSD License.
http://sinonjs.org/releases/v5.1.0/fakes

Spec-Zone.ru

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