Spec-Zone.ru › Sinon.JS 15

Сопоставители

Сопоставители могут передаваться в качестве аргументов к 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

Spec-Zone.ru

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