Песочницы
Песочницы устраняют необходимость отслеживания каждого созданного фейка, что значительно упрощает очистку.
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 являются ложными по сравнению со значениями по умолчанию в 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» здесь недостаточно для того, чтобы свойство server появилось в целевом объекте; вам также необходимо установить useFakeServer в true.
использовать фейковые таймеры
Если установлено в true, песочница будет иметь свойство clock. Вы можете необязательно передать объект конфигурации, который соответствует спецификации для фейковых таймеров, например { toFake: ["setTimeout", "setInterval"] }.
использовать фейковый сервер
Если 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.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);
Приводит к тому, что все заглушки и моки, созданные из песочницы, возвращают обещания с использованием определённой библиотеки Promise вместо глобальной, когда используются 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/v7.5.0/sandbox