Spec-Zone.ru › Sinon.JS 8

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

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

sinon.match.set

Требует, чтобы значение было Set.

sinon.match.set.deepEquals(set)

Требует, чтобы Set были глубоко равны друг другу.

sinon.match.set.contains(set)

Требует, чтобы 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/v8.1.1/matchers

Spec-Zone.ru

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