Песочницы
Песочницы устраняют необходимость отслеживания каждого созданного фейка, что значительно упрощает очистку.
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 может назначить объект, к которому нужно добавить свойства.
properties
Какие свойства вставлять. Обратите внимание, что простое указание «сервер» здесь недостаточно для отображения свойства 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.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–2017 Christian Johansen
Licensed under the BSD License.
http://sinonjs.org/releases/v3.3.0/sandbox