Сопоставители
Сопоставители могут быть переданы в качестве аргументов функциям 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.
Свойство может быть унаследовано через цепочку прототипов. Если задан необязательный параметр expectation, значение свойства сравнивается по глубине с expectation. Expectation может быть другим сопоставителем.
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].
Свойство propertyPath может быть унаследовано через цепочку прототипов. Если задан необязательный параметр expectation, значение в propertyPath сравнивается по глубине с expectation. Expectation может быть другим сопоставителем.
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 } } };
Объединение сопоставителей
Все сопоставители реализуют 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, которая принимает тестовую функцию и необязательное сообщение.
Функция test принимает значение в качестве единственного аргумента, возвращает true , если значение соответствует ожиданию, и false в противном случае. Строка сообщения используется для генерации сообщения об ошибке в случае, если значение не соответствует ожиданию.
var trueIsh = sinon.match(function (value) {
return !!value;
}, "trueIsh");
© 2010–2017 Christian Johansen
Licensed under the BSD License.
http://sinonjs.org/releases/v3.3.0/matchers