Матчеры
Матчеры могут передаваться в качестве аргументов в 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.match.in(array)
Требует, чтобы значение находилось в array.
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.
Свойство может быть унаследовано через цепочку прототипов. Если задано необязательное ожидание, значение по пути к свойству глубоко сравнивается с ожиданием. Ожидание может быть другим матчером.
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–2020 Christian Johansen
Licensed under the BSD License.
https://sinonjs.org/releases/v9.2.2/matchers