Сопоставители
Сопоставители можно передавать в качестве аргументов в 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)
Требует, чтобы заданному matcher соответствовал каждый элемент Array, Set или Map либо, альтернативно, каждое значение Object
sinon.match.some(matcher)
Требует, чтобы заданному matcher соответствовал любой элемент Array, Set или Map либо, альтернативно, любое значение Object
Комбинирование сопоставителей
Все сопоставители реализуют and и or. Это позволяет логически объединять несколько сопоставителей. В результате создаётся новый сопоставитель, требующий, чтобы оба сопоставителя (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/v12/matchers