Сопоставители
Сопоставители могут передаваться в качестве аргументов к 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", "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.
Свойство path может быть унаследовано через цепочку прототипов. Если указано необязательное ожидание, значение в свойстве path глубоко сравнивается с ожиданием. Ожидание может быть другим сопоставителем.
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–2022 Christian Johansen
Licensed under the BSD License.
https://sinonjs.org/releases/v15/matchers