Матчи
Матчи могут быть переданы в качестве аргументов в spy.calledOn, spy.calledWith, spy.returned и соответствующих sinon.assert функциях, а также spy.withArgs. Матчи позволяют быть более размытыми или более конкретными относительно ожидаемого значения.
"test should assert fuzzy": function () {
var book = {
pages: 42,
author: "cjno"
id: {
isbn10: "0596517742",
isbn13: "978-0596517748"
}
};
var spy = sinon.spy();
spy(book);
sinon.assert.calledWith(spy, sinon.match({ author: "cjno" }));
sinon.assert.calledWith(spy, sinon.match.has("pages", 42));
sinon.assert.calledWith(spy, sinon.match.has("id", sinon.match.has("isbn13", "978-0596517748")));
}
"test should stub method differently based on argument types": function () {
var callback = sinon.stub();
callback.withArgs(sinon.match.string).returns(true);
callback.withArgs(sinon.match.number).throws("TypeError");
callback("abc"); // Returns true
callback(123); // Throws TypeError
}
API матчей
sinon.match(number);
Требует, чтобы значение было равно указанному числу.
sinon.match(string);
Требует, чтобы значение было строкой и содержало ожидание в качестве подстроки.
sinon.match(regexp);
Требует, чтобы значение было строкой и соответствовало заданному регулярному выражению.
sinon.match(object);
Требует, чтобы значение не было null или undefined и имело как минимум те же свойства, что и expectation.
Это поддерживает вложенные матчи.
sinon.match(function)
См. custom matchers.
sinon.match.any
Соответствует любому значению.
sinon.match.defined
Требует, чтобы значение было определено.
sinon.match.truthy
Требует, чтобы значение было истинным.
sinon.match.falsy
Требует, чтобы значение было ложным.
sinon.match.bool
Требует, чтобы значение было Boolean
sinon.match.number
Требует, чтобы значение было Number.
sinon.match.string
Требует, чтобы значение было String.
sinon.match.object
Требует, чтобы значение было Object.
sinon.match.func
Требует, чтобы значение было Function.
sinon.match.array
Требует, чтобы значение было Array.
sinon.match.array.deepEquals(arr)
Требует, чтобы Array было глубоко равно другому.
sinon.match.array.startsWith(arr)
Требует, чтобы Array начиналось с тех же значений, что и другое.
sinon.match.array.endsWith(arr)
Требует, чтобы Array заканчивалось теми же значениями, что и другое.
sinon.match.array.contains(arr)
Требует, чтобы Array содержало каждое значение из заданного массива.
sinon.match.map
Требует, чтобы значение было Map.
sinon.match.map.deepEquals(map)
Требует, чтобы Map было глубоко равно другому.
sinon.match.map.contains(map)
Требует, чтобы Map содержало каждый элемент заданного словаря.
sinon.match.set
Требует, чтобы значение было Set.
sinon.match.set.deepEquals(set)
Требует, чтобы Set было глубоко равно другому.
sinon.match.set.contains(set)
Требует, чтобы Set содержало каждый элемент заданного множества.
sinon.match.regexp
Требует, чтобы значение было регулярным выражением.
sinon.match.date
Требует, чтобы значение было объектом типа Date.
sinon.match.symbol
Требует, чтобы значение было Symbol.
С sinon@2.0.0
sinon.match.same(ref)
Требует, чтобы значение строго равнялось ref.
sinon.match.typeOf(type)
Требует, чтобы значение было заданного типа, где type может быть одним из "undefined", "null", "boolean", "number", "string", "object", "function", "array", "regexp", "date" или "symbol".
sinon.match.instanceOf(type)
Требует, чтобы значение было экземпляром указанного type.
sinon.match.has(property[, expectation])
Требует, чтобы значение определяло заданное property.
Свойство может быть унаследовано через цепочку прототипов. Если указано необязательное ожидание, значение свойства глубоко сравнивается с ожиданием. Ожидание может быть другим матчем.
sinon.match.hasOwn(property[, expectation])
То же самое, что и sinon.match.has, но свойство должно быть определено самим значением. Унаследованные свойства игнорируются.
sinon.match.hasNested(propertyPath[, expectation])
Требует, чтобы значение определяло заданный propertyPath. Поддерживаются обозначения точка (prop.prop) и квадратные скобки (prop[0]) как в (Lodash.get)[https://lodash.com/docs/4.4.2#get].
Свойство может быть унаследовано через цепочку прототипов. Если указано необязательное ожидание, значение по пути свойства глубоко сравнивается с ожиданием. Ожидание может быть другим матчем.
sinon.match.hasNested("a[0].b.c");
// Where actual is something like
var actual = { "a": [{ "b": { "c": 3 } }] };
sinon.match.hasNested("a.b.c");
// Where actual is something like
var actual = { "a": { "b": { "c": 3 } } };
sinon.match.every(matcher)
Требует, чтобы каждый элемент массива Array, Set или Map, или альтернативно каждое значение Object соответствовало заданному matcher.
sinon.match.some(matcher)
Требует, чтобы любой элемент массива Array, Set или Map, или альтернативно любое значение Object соответствовало заданному matcher.
Комбинирование матчей
Все матчи реализуют and и or. Это позволяет логически комбинировать несколько матчей. Результатом является новый матч, который требует, чтобы оба (и) или один из матчей (или) возвращали true.
var stringOrNumber = sinon.match.string.or(sinon.match.number);
var bookWithPages = sinon.match.instanceOf(Book).and(sinon.match.has("pages"));
Настраиваемые матчи
Настраиваемые матчи создаются с помощью фабрики sinon.match, которая принимает функцию проверки и необязательное сообщение.
Функция проверки принимает значение в качестве единственного аргумента, возвращает true если значение соответствует ожиданию и false в противном случае. Строка сообщения используется для генерации сообщения об ошибке в случае, если значение не соответствует ожиданию.
var trueIsh = sinon.match(function (value) {
return !!value;
}, "trueIsh");
© 2010–2018 Christian Johansen
Licensed under the BSD License.
http://sinonjs.org/releases/v4.5.0/matchers