Spec-Zone.ru › Sinon.JS 4

Песочницы

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

var sinon = require('sinon');

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

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();
        sinon.assert.calledOnce(myAPI.hello);
    });

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

API песочницы

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.

useFakeTimers

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

useFakeServer

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

sinon.config = {
    useFakeServer: sinon.fakeServerWithClock
};

sandbox.assert();

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

С sinon@2.0.0

sandbox.spy();

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

sandbox.createStubInstance();

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

sandbox.stub();

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

Метод песочницы 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.restore()

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

Spec-Zone.ru

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