Spec-Zone.ru › Sinon.JS 4

Матчи

Матчи могут быть переданы в качестве аргументов в 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.

Свойство может быть унаследовано через цепочку прототипов. Если указано необязательное ожидание, значение свойства глубоко сравнивается с ожиданием. Ожидание может быть другим матчем.

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].

Свойство может быть унаследовано через цепочку прототипов. Если указано необязательное ожидание, значение по пути свойства глубоко сравнивается с ожиданием. Ожидание может быть другим матчем.

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.
http://sinonjs.org/releases/v4.5.0/matchers

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API