Spec-Zone.ru › Sinon.JS 7

Матчеры

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

Spec-Zone.ru

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