Spec-Zone.ru › Sinon.JS 8

Песочницы

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

var sandbox = require('sinon').createSandbox();
var myAPI = { hello: function () {} };

describe('myAPI.hello method', function () {

    beforeEach(function () {
        // stub out the `hello` method
        sandbox.stub(myAPI, 'hello');
    });

    afterEach(function () {
        // completely restore all fakes created through the sandbox
        sandbox.restore();
    });

    it('should be called once', function () {
        myAPI.hello();
        sandbox.assert.calledOnce(myAPI.hello);
    });

    it('should be called twice', function () {
        myAPI.hello();
        myAPI.hello();
        sandbox.assert.calledTwice(myAPI.hello);
    });
});

API песочницы

По умолчанию песочница

С sinon@5.0.0, объект sinon является песочницей по умолчанию. Если у вас не очень сложная настройка или вам не нужна специальная конфигурация, вы, вероятно, захотите использовать только её.

const myObject = {
    'hello': 'world'
};

sinon.stub(myObject, 'hello').value('Sinon');

console.log(myObject.hello);
// Sinon

sinon.restore();
console.log(myObject.hello);
// world

var sandbox = sinon.createSandbox();

Создаёт новый объект песочницы со шпионами, заглушками и моками.

var sandbox = sinon.createSandbox(config);

Метод sinon.createSandbox(config) часто является функцией интеграции и может использоваться для сценариев, включая глобальный объект для координации всех фейков.

Песочницы частично настраиваются по умолчанию таким образом, что вызов:

var sandbox = sinon.createSandbox({});

будет объединять дополнительные значения по умолчанию, аналогично:

var sandbox = sinon.createSandbox({
    // ...
    injectInto: null,
    properties: ["spy", "stub", "mock"],
    useFakeTimers: false,
    useFakeServer: false
});

Значения useFakeTimers и useFakeServers установлены в false, в отличие от значений по умолчанию в файле по умолчанию sinon.defaultConfig:

sinon.defaultConfig = {
    // ...
    injectInto: null,
    properties: ["spy", "stub", "mock", "clock", "server", "requests"],
    useFakeTimers: true,
    useFakeServer: true
}

Чтобы получить полную песочницу со заглушками, шпионами и т. д. и фейковыми таймерами и серверами, вы можете вызвать:

// Inject the sinon defaults explicitly.
var sandbox = sinon.createSandbox(sinon.defaultConfig);

// (OR) Add the extra properties that differ from the sinon defaults.
var sandbox = sinon.createSandbox({
    useFakeTimers: true,
    useFakeServer: true
});
injectInto

Методы песочницы могут быть инжектированы в другой объект для удобства. Параметр конфигурации injectInto может задать объект, в который нужно добавить свойства.

свойства

Какие свойства инжектировать. Обратите внимание, что просто указание «сервер» здесь недостаточно, чтобы свойство server появилось в целевом объекте, вы также должны установить useFakeServer в true.

Список свойств, которые можно инжектировать, — это те, которые экспонирует объект, возвращаемый функцией inject, а именно:

{
    //...
    properties: [
        "spy", "stub", "mock", "createStubInstance", "fake", "replace",
        "replaceSetter", "replaceGetter", "clock", "server", "requests", "match"
    ]
}
useFakeTimers

Если установлено в true, в песочнице будет свойство clock. Вы можете необязательно передать объект конфигурации, который соответствует спецификации для фейковых таймеров, например { toFake: ["setTimeout", "setInterval"] }.

useFakeServer

Если true, свойства server и requests добавляются в песочницу. Также может быть объектом для использования фейкового сервера. По умолчанию это sinon.fakeServer, но если вы используете jQuery 1.3.x или какую-либо другую библиотеку, которая не устанавливает обработчик onreadystatechange XHR, вы можете сделать:

sinon.config = {
    useFakeServer: sinon.fakeServerWithClock
};
пример экспонирования песочницы

Чтобы создать объект sandboxFacade, в который инжектируется метод spy, вы можете написать:

// object that will have the spy method injected into it
var sandboxFacade = {};

// create sandbox and inject properties (in this case spy) into sandboxFacade
var sandbox = sinon.createSandbox({
    injectInto: sandboxFacade,
    properties: ["spy"]
});

sandbox.assert();

Удобная ссылка на sinon.assert

С sinon@2.0.0

sandbox.replace(object, property, replacement);

Заменяет property в object на значение replacement. Попытка заменить уже заменённое значение вызывает исключение.

replacement может быть любым значением, включая spies, stubs и fakes.

Этот метод работает только с не-аксессорными свойствами; для замены аксессоров используйте sandbox.replaceGetter() и sandbox.replaceSetter().

var myObject = {
    myMethod: function() {
        return 'apple pie';
    }
};

sandbox.replace(myObject, 'myMethod', function () {
    return 'strawberry';
});

console.log(myObject.myMethod());
// strawberry

sandbox.replaceGetter();

Заменяет геттер для property в object на значение replacement. Попытка заменить уже заменённый геттер вызывает исключение.

replacement должен быть Function, и может быть экземпляром spies, stubs и fakes.

var myObject = {
    get myProperty: function() {
        return 'apple pie';
    }
};

sandbox.replaceGetter(myObject, 'myMethod', function () {
    return 'strawberry';
});

console.log(myObject.myProperty);
// strawberry

sandbox.replaceSetter();

Заменяет сеттер для property в object на значение replacement. Попытка заменить уже заменённый сеттер вызывает исключение.

replacement должен быть Function, и может быть экземпляром spies, stubs и fakes.

var object = {
    set myProperty(value) {
        this.prop = value;
    }
};

sandbox.replaceSetter(object, 'myProperty', function (value) {
    this.prop = 'strawberry ' + value;
});

object.myProperty = 'pie';

console.log(object.prop);
// strawberry pie

sandbox.spy();

Работает точно так же, как sinon.spy

sandbox.createStubInstance();

Работает почти точно так же, как sinon.createStubInstance, но также добавляет возвращённые заглушки в внутренний набор фейков для восстановления через sandbox.restore().

sandbox.stub();

Работает точно так же, как sinon.stub.

Заглушка не-функционального свойства
const myObject = {
    'hello': 'world'
};

sandbox.stub(myObject, 'hello').value('Sinon');

console.log(myObject.hello);
// Sinon

sandbox.restore();
console.log(myObject.hello);
// world

sandbox.mock();

Работает точно так же, как sinon.mock

sandbox.useFakeTimers();

Имитирует таймеры и связывает объект clock с песочницей так, что он тоже восстанавливается при вызове sandbox.restore().

Доступ через sandbox.clock.

sandbox.useFakeXMLHttpRequest();

Имитирует XHR и связывает полученный объект с песочницей так, что он тоже восстанавливается при вызове sandbox.restore().

Начиная с версии 2.x, вы больше не можете получить доступ к запросам через sandbox.requests — используйте sandbox.useFakeServer, чтобы сделать это. Эта функция соответствует sinon.useFakeXMLHttpRequest, только с песочницей.

sandbox.useFakeServer();

Имитирует XHR и связывает объект сервера с песочницей, так что он тоже восстанавливается при вызове sandbox.restore().

Получить доступ к запросам через sandbox.requests, а к серверу через sandbox.server.

sandbox.usingPromise(promiseLibrary);

Заставляет все заглушки и моки, созданные из песочницы, возвращать обещания с использованием определённой библиотеки обещаний вместо глобальной, при использовании stub.rejects или stub.resolves. Возвращает заглушку для возможности цепочки вызовов.

С sinon@2.0.0

sandbox.restore();

Восстанавливает все фейки, созданные через песочницу.

sandbox.reset();

Сбрасывает внутреннее состояние всех фейков, созданных через песочницу.

sandbox.resetBehavior();

Сбрасывает поведение всех заглушек, созданных через песочницу.

С sinon@2.0.0

sandbox.resetHistory();

Сбрасывает историю всех заглушек, созданных через песочницу.

С sinon@2.0.0

sandbox.verify();

Проверяет все моки, созданные через песочницу.

sandbox.verifyAndRestore();

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

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

Spec-Zone.ru

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