Spec-Zone.ru › Sinon.JS 10

Заглушки

Введение

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.

Если в качестве аргумента 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([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.firstArg

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

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

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

f.firstArg === date2;
// 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/v10.0.1/fakes

Spec-Zone.ru

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