Утверждения
Sinon.JS поставляется с набором утверждений, которые отражают большинство методов проверки поведения и свойств шпионских объектов и заглушек. Преимущество использования утверждений заключается в том, что невыполненные ожидания относительно заглушек и шпионских объектов могут быть выражены непосредственно как сбои утверждений с подробными и полезными сообщениями об ошибках.
Чтобы убедиться, что утверждения хорошо интегрируются с вашей тестовой средой, необходимо настроить либо sinon.assert.fail или sinon.assert.failException и изучить sinon.assert.expose и sinon.assert.pass.
Утверждения могут быть использованы как со шпионами, так и с заглушками.
"test should call subscribers with message as first argument" : function () {
var message = "an example message";
var spy = sinon.spy();
PubSub.subscribe(message, spy);
PubSub.publishSync(message, "some payload");
sinon.assert.calledOnce(spy);
sinon.assert.calledWith(spy, message);
}
API утверждений
sinon.assert.fail(message)
Каждое утверждение завершается вызовом этого метода.
По умолчанию он генерирует ошибку типа sinon.assert.failException.
Если тестовая среда ищет ошибки утверждения, проверяя наличие конкретной исключительной ситуации, вы можете просто переопределить тип генерируемого исключения. Если это не подходит для вашей тестовой среды, переопределите метод fail для корректного поведения.
sinon.assert.failException;
По умолчанию AssertError.
sinon.assert.pass(assertion);
Вызывается каждый раз, когда assertion успешно выполняется.
Реализация по умолчанию ничего не делает.
sinon.assert.notCalled(spy);
Проходит, если spy никогда не вызывался.
sinon.assert.called(spy);
Проходит, если spy был вызван как минимум один раз.
sinon.assert.calledOnce(spy);
Проходит, если spy был вызван один и только один раз.
sinon.assert.calledTwice(spy);
Проходит, если spy был вызван ровно два раза.
sinon.assert.calledThrice(spy)
Проходит, если spy был вызван ровно три раза.
sinon.assert.callCount(spy, num)
Проходит, если spy был вызван ровно num раз.
sinon.assert.callOrder(spy1, spy2, ...)
Проходит, если указанные шпионы были вызваны в заданном порядке.
sinon.assert.calledOn(spyOrSpyCall, obj)
Проходит, если spy когда-либо вызывался со значением obj в качестве this.
Можно утверждать относительно отдельного вызова шпиона: sinon.assert.calledOn(spy.firstCall, arg1, arg2, ...);.
sinon.assert.alwaysCalledOn(spy, obj)
Проходит, если spy всегда вызывался со значением obj в качестве this.
sinon.assert.calledWith(spyOrSpyCall, arg1, arg2, ...);
Проходит, если spy был вызван с указанными аргументами.
Можно утверждать относительно отдельного вызова шпиона: sinon.assert.calledWith(spy.firstCall, arg1, arg2, ...);.
sinon.assert.alwaysCalledWith(spy, arg1, arg2, ...);
Проходит, если spy всегда вызывался с указанными аргументами.
sinon.assert.neverCalledWith(spy, arg1, arg2, ...);
Проходит, если spy никогда не вызывался с указанными аргументами.
sinon.assert.calledWithExactly(spyOrSpyCall, arg1, arg2, ...);
Проходит, если spy был вызван с предоставленными аргументами и ни с какими другими.
Можно утверждать относительно отдельного вызова шпиона: sinon.assert.calledWithExactly(spy.getCall(1), arg1, arg2, ...);.
sinon.assert.alwaysCalledWithExactly(spy, arg1, arg2, ...);
Проходит, если spy всегда вызывался с предоставленными аргументами и ни с какими другими.
sinon.assert.calledWithMatch(spyOrSpyCall, arg1, arg2, ...)
Проходит, если spy был вызван с соответствующими аргументами.
Это работает так же, как и sinon.assert.calledWith(spy, sinon.match(arg1), sinon.match(arg2), ...).
Можно утверждать относительно отдельного вызова шпиона: sinon.assert.calledWithMatch(spy.secondCall, arg1, arg2, ...);.
sinon.assert.alwaysCalledWithMatch(spy, arg1, arg2, ...)
Проходит, если spy всегда вызывался с соответствующими аргументами.
Это работает так же, как и sinon.assert.alwaysCalledWith(spy, sinon.match(arg1), sinon.match(arg2), ...).
sinon.assert.calledWithNew(spyOrSpyCall)
Проходит, если spy был вызван с оператором new.
Можно утверждать относительно отдельного вызова шпиона: sinon.assert.calledWithNew(spy.secondCall, arg1, arg2, ...);.
sinon.assert.neverCalledWithMatch(spy, arg1, arg2, ...)
Проходит, если spy никогда не вызывался с соответствующими аргументами.
Это работает так же, как и sinon.assert.neverCalledWith(spy, sinon.match(arg1), sinon.match(arg2), ...).
sinon.assert.threw(spyOrSpyCall, exception);
Проходит, если spy сгенерировал указанное исключение.
Исключение может быть String, обозначающим его тип, или фактическим объектом.
Если предоставлен только один аргумент, утверждение проходит, если spy когда-либо генерировал какое-либо исключение.
Можно утверждать относительно отдельного вызова шпиона: sinon.assert.threw(spy.thirdCall, exception);.
sinon.assert.alwaysThrew(spy, exception);
Как и выше, требуется для всех вызовов шпиона.
sinon.assert.match(actual, expectation);
Использует sinon.match для проверки, можно ли считать аргументы совпадающими.
var sinon = require('sinon');
describe('example', function(){
it('should match on `x` property, and ignore `y` property', function() {
var expected = {x: 1},
actual = {x: 1, y: 2};
sinon.assert.match(actual, expected);
});
});
sinon.assert.expose(object, options);
Выводит утверждения в другой объект для лучшей интеграции с тестовой средой. Например, JsTestDriver использует глобальные утверждения, и чтобы утверждения Sinon.JS появлялись вместе с ними, можно сделать так.
sinon.assert.expose(this);
Это даст вам assertCalled(spy), assertCallOrder(spy1, spy2, ...) и так далее.
Метод принимает необъект `options` с двумя параметрами.
- prefix
- является префиксом утверждений. По умолчанию он равен "assert", поэтому
sinon.assert.calledпреобразуется вtarget.assertCalled. Передав пустую строку, экспонируемый метод будетtarget.called. - includeFail
-
trueПо умолчанию копирует свойстваfailиfailException
© 2010–2018 Christian Johansen
Licensed under the BSD License.
http://sinonjs.org/releases/v5.1.0/assertions