Песочницы
Песочницы упрощают работу с фиктивными данными, которые необходимо восстановить и/или проверить.
Если вы используете фиктивные таймеры, фиктивные запросы XHR или подменяете/проверяете доступные глобально свойства, вам следует использовать песочницу для упрощения очистки. По умолчанию свойства «шпион», «заглушка» и «модель» песочницы привязаны к объекту, на котором выполняется функция. Поэтому, если вы не хотите вручную restore(), вам нужно использовать this.spy() вместо sinon.spy() (и заглушку, модель).
"test using sinon.test sandbox": sinon.test(function () {
var myAPI = { method: function () {} };
this.mock(myAPI).expects("method").once();
PubSub.subscribe("message", myAPI.method);
PubSub.publishSync("message", undefined);
})
API песочницы
var sandbox = sinon.sandbox.create();
Создаёт объект песочницы
var sandbox = sinon.sandbox.create(config);
Метод sinon.sandbox.create(config) в основном является интеграционной функцией, и как конечный пользователь Sinon.JS вам, вероятно, он не понадобится.
Создаёт предварительно настроенный объект песочницы. Настройка может указать песочнице включить фиктивные таймеры, фиктивный сервер и способ взаимодействия с ними.
Настройка по умолчанию выглядит следующим образом:
sinon.defaultConfig = {
// ...
injectInto: null,
properties: ["spy", "stub", "mock", "clock", "server", "requests"],
useFakeTimers: true,
useFakeServer: true
}
injectInto- Методы песочницы можно ввести в другой объект для удобства. Параметр конфигурации
injectIntoможет указывать объект, к которому будут добавлены свойства. Обычно это устанавливаетсяsinon.testтаким образом, что он является значениемthisв данной тестовой функции. properties- Какие свойства вводить. Обратите внимание, что простое указание «сервер» здесь недостаточно для того, чтобы свойство
serverпоявилось в целевом объекте, вам также необходимо установитьuseFakeServerвtrue. useFakeTimers- Если
true, у песочницы будет свойствоclock. Также может быть массивом свойств таймеров для имитации. useFakeServer- Если
true, свойстваserverиrequestsдобавляются к песочнице. Также может быть объектом для использования фиктивного сервера. По умолчанию этоsinon.fakeServer, но если вы используете jQuery 1.3.x или какую-либо другую библиотеку, которая не устанавливает обработчикonreadystatechangeдля XHR, вам может понадобиться сделать следующее:sinon.config = { useFakeServer: sinon.fakeServerWithClock };
sandbox.spy();
Работает точно так же, как sinon.spy, но также добавляет возвращённого шпиона в внутренний набор фиктивных данных для лёгкого восстановления с помощью sandbox.restore()
sandbox.stub();
Работает почти точно так же, как sinon.stub, но также добавляет возвращённую заглушку в внутренний набор фиктивных данных для лёгкого восстановления с помощью sandbox.restore().
Метод песочницы stub также может быть использован для подмены любого свойства. Это полезно, если вам нужно переопределить свойство объекта на время теста и восстановить его по завершении теста.
sandbox.mock();
Работает точно так же, как sinon.mock, но также добавляет возвращённую модель в внутренний набор фиктивных данных для лёгкого восстановления с помощью sandbox.restore()
sandbox.useFakeTimers();
Имитирует таймеры и привязывает объект clock к песочнице таким образом, что он также восстанавливается при вызове sandbox.restore().
Доступ через sandbox.clock.
sandbox.useFakeXMLHttpRequest();
Имитирует запросы XHR и привязывает полученный объект к песочнице таким образом, что он также восстанавливается при вызове sandbox.restore().
Доступ к запросам через sandbox.requests.
sandbox.useFakeServer();
Имитирует запросы XHR и привязывает объект сервера к песочнице таким образом, что он также восстанавливается при вызове sandbox.restore().
Доступ к запросам через sandbox.requests и сервер через sandbox.server
sandbox.restore();
Восстанавливает все фиктивные данные, созданные через песочницу.
sandbox.reset();
Сбрасывает внутреннее состояние всех фиктивных данных, созданных через песочницу.
sandbox.verify();
Проверяет все модели, созданные через песочницу.
sandbox.verifyAndRestore();
Проверяет все модели и восстанавливает все фиктивные данные, созданные через песочницу.
Методы тестирования
Примечание: В sinon@2.0.0 это было выделено в отдельный модуль sinon-test.
Оборачивание тестовых методов в sinon.test позволяет Sinon.JS автоматически создавать и управлять песочницами для вас. Поведение функции можно настроить с помощью sinon.config.
var wrappedFn = sinon.test(fn);`
Функция wrappedFn работает точно так же, как и оригинальная во всех отношениях — дополнительно создаётся объект песочницы и автоматически восстанавливается по завершении вызова функции.
По умолчанию свойства «шпион», «заглушка» и «модель» песочницы привязаны к объекту, на котором выполняется функция. Таким образом, вы можете сделать this.spy() (и заглушка, модель), и это работает точно так же, как sandbox.spy() (и заглушка, модель), за исключением того, что вам не нужно вручную restore().
{
injectIntoThis: true,
injectInto: null,
properties: ["spy", "stub", "mock", "clock", "server", "requests"],
useFakeTimers: true,
useFakeServer: true
}
Просто установите sinon.config для переопределения любых или всех этих значений, например:
sinon.config = {
useFakeTimers: false,
useFakeServer: false
}
В этом случае по умолчанию используются значения для отсутствующих свойств. Кроме того, песочницы и тесты не будут иметь автоматического доступа к фиктивным таймерам и фиктивному серверу при использовании этой конфигурации.
sinon.config
Настройка контролирует, как Sinon привязывает свойства при использовании sinon.test.
Настройка по умолчанию выглядит следующим образом:
Boolean injectIntoThis- Приводит к вводу свойств в объект `this` тестовой функции. Значение по умолчанию
true. Object injectInto- Объект для привязки свойств. Если это
null(по умолчанию), иinjectIntoThisявляетсяfalse(не по умолчанию), свойства передаются в качестве аргументов тестовой функции. Array properties- Свойства для экспонирования. По умолчанию все:
["spy", "stub", "mock", "clock", "server", "requests"]. Однако последние три свойства привязываются только в том случае, если следующие два параметра конфигурацииtrue(что по умолчанию). Boolean useFakeTimers- Приводит к имитации таймеров и позволяет экспонировать свойство
clock. Значение по умолчаниюtrue. Boolean useFakeServer- Приводит к созданию фиктивных XHR и сервера и позволяет экспонировать свойства
serverиrequests. Значение по умолчаниюtrue.
Тестовые случаи
Если вам нужно поведение sinon.test для более чем одного тестового метода в тестовом случае, вы можете использовать sinon.testCase, которое ведет себя точно так же, как обертывание каждого теста в sinon.test с одним исключением: setUp и tearDown могут совместно использовать фиктивные данные.
var obj = sinon.testCase({});
© 2010–2017 Christian Johansen
Licensed under the BSD License.
http://sinonjs.org/releases/v1.17.7/sandbox