Сопоставители
Сопоставители могут передаваться в качестве аргументов функциям 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–2018 Christian Johansen
Licensed under the BSD License.
https://sinonjs.org/releases/v6.3.5/matchers