Spec-Zone.ru › Chai

Утилиты плагинов

Утилиты плагинов предназначены для тех, кто хочет расширить Chai собственным набором утверждений. Руководства по Концепции плагина Кода и Создание помощника — отличная справочная информация для начала работы со своими утверждениями.

Справочник API

.addChainableMethod(ctx, name, method, chainingBehavior)

  • @param { Object } ctx объект, к которому добавляется метод
  • @param { String } name имя добавляемого метода
  • @param { Function } method функция, используемая для `name`, при вызове
  • @param { Function } chainingBehavior функция, вызываемая каждый раз при обращении к свойству

Добавляет метод к объекту, позволяя его цепочную вызов.

utils.addChainableMethod(chai.Assertion.prototype, 'foo', function (str) {
  var obj = utils.flag(this, 'object');
  new chai.Assertion(obj).to.be.equal(str);
});

Также к нему можно получить доступ напрямую из chai.Assertion.

chai.Assertion.addChainableMethod('foo', fn, chainingBehavior);

Результат может быть использован как утверждение метода, выполняя как method и chainingBehavior, или как цепочный язык, выполняющий только chainingBehavior.

expect(fooStr).to.be.foo('bar');
expect(fooStr).to.be.foo.equal('foo');

.addLengthGuard(fn, assertionName, isChainable)

  • @param { Function } fn
  • @param { String } assertionName
  • @param { Boolean } isChainable

Определить length как свойство-геттер заданного невызванного утверждения метода. Геттер выступает в качестве защиты от цепочной записи length напрямую после невызванного утверждения метода, что является проблемой, так как он ссылается на встроенное length свойство function, а не на утверждение Chai length.

Существует два способа совершить эту ошибку. Первый способ — это цепочная запись утверждения length напрямую после невызванного цепочного метода. В этом случае Chai предлагает пользователю использовать lengthOf вместо этого. Второй способ — это цепочная запись утверждения length напрямую после невызванного метода без цепочки. Методы без цепочной записи должны быть вызваны до цепочки. В этом случае Chai предлагает пользователю обратиться к документации по данному утверждению.

Если свойство length функций не может быть переконфигурировано, то верните fn без изменений.

Обратите внимание, что в ES6 свойство функции length может быть переконфигурировано, поэтому после того, как поддержка устаревших сред будет прекращена, свойство Chai length сможет заменить встроенное свойство функции length, и этот ограничитель длины больше не понадобится. Тем временем приоритетом является поддержание согласованности во всех средах.

.addMethod(ctx, name, method)

  • @param { Object } ctx объект, к которому добавляется метод
  • @param { String } name имя добавляемого метода
  • @param { Function } method функция, используемая для имени

Добавляет метод к прототипу объекта.

utils.addMethod(chai.Assertion.prototype, 'foo', function (str) {
  var obj = utils.flag(this, 'object');
  new chai.Assertion(obj).to.be.equal(str);
});

Также к нему можно получить доступ напрямую из chai.Assertion.

chai.Assertion.addMethod('foo', fn);

Затем он может быть использован как любое другое утверждение.

expect(fooStr).to.be.foo('bar');

.addProperty(ctx, name, getter)

  • @param { Object } ctx объект, к которому добавляется свойство
  • @param { String } name имя добавляемого свойства
  • @param { Function } getter функция, используемая для имени

Добавляет свойство к прототипу объекта.

utils.addProperty(chai.Assertion.prototype, 'foo', function () {
  var obj = utils.flag(this, 'object');
  new chai.Assertion(obj).to.be.instanceof(Foo);
});

Также к нему можно получить доступ напрямую из chai.Assertion.

chai.Assertion.addProperty('foo', fn);

Затем он может быть использован как любое другое утверждение.

expect(myFoo).to.be.foo;

.compareByInspect(mixed, mixed)

  • @param { Mixed } first элемент для сравнения
  • @param { Mixed } second элемент для сравнения

Используется в качестве compareFunction с Array.prototype.sort. Сравнивает элементы с помощью inspect вместо стандартного поведения использования toString, поэтому символы и объекты с нестандартным/отсутствующим toString все еще могут быть отсортированы без ошибки TypeError.

.expectTypes(obj, types)

  • @param { Mixed } obj созданное утверждение
  • @param { Array } type Список разрешенных типов для данного утверждения

Обеспечивает, что тестируемый объект имеет допустимый тип.

utils.expectTypes(this, ['array', 'object', 'string']);

.flag(object, key, [value])

  • @param { Object } object созданное утверждение
  • @param { String } key
  • @param { Mixed } value (необязательно)

Получение или установка значения флага в объекте. Если значение предоставлено, оно будет установлено, в противном случае будет возвращено текущее значение или undefined, если значение не установлено.

utils.flag(this, 'foo', 'bar'); // setter
utils.flag(this, 'foo'); // getter, returns `bar`

.getActual(object, [actual])

  • @param { Object } object (созданное утверждение)
  • @param { Arguments } chai.Assertion.prototype.assert аргументы

Возвращает значение actual для утверждения.

.getEnumerableProperties(object)

  • @param { Object } object

Это позволяет получить имена перечисляемых свойств объекта, унаследованных или нет.

.getMessage(object, message, negateMessage)

  • @param { Object } object (созданное утверждение)
  • @param { Arguments } chai.Assertion.prototype.assert аргументы

Строит сообщение об ошибке на основе флагов и шаблонов меток. Метки шаблонов вернут строковое представление объекта, на который ссылаются.

Метки шаблонов сообщений:

  • #{this} текущий объект, утверждаемый
  • #{act} фактическое значение
  • #{exp} ожидаемое значение

.getOperator(message)

  • @param { Object } object (созданное утверждение)
  • @param { Arguments } chai.Assertion.prototype.assert аргументы

Извлечение оператора из сообщения об ошибке. Определенный оператор основан на ссылке https://nodejs.org/api/assert.html#assert_assert.

Возвращает значение operator или undefined для утверждения.

.getOwnEnumerableProperties(object)

  • @param { Object } object

Это позволяет получить имена и символы непосредственно принадлежащих перечисляемых свойств объекта. Эта функция необходима, так как Object.keys возвращает только имена перечисляемых свойств, а не перечисляемые символы свойств.

END_OF_DOCUMENT_MARKER

.getOwnEnumerablePropertySymbols(object)

  • @param { Object } object

Это позволяет получить символы перечисляемых свойств, непосредственно принадлежащих объекту. Эта функция необходима, потому что Object.getOwnPropertySymbols возвращает как перечисляемые, так и неперечисляемые символы свойств.

.getProperties(object)

  • @param { Object } object

Это позволяет получить имена свойств объекта, перечисляемые или нет, унаследованные или нет.

.inspect(obj, [showHidden], [depth], [colors])

  • @param { Object } obj Объект для вывода.
  • @param { Boolean } showHidden Флаг, показывающий скрытые (неперечисляемые) свойства объектов. По умолчанию false.
  • @param { Number } depth Глубина, на которую необходимо спуститься в объекте. По умолчанию 2.
  • @param { Boolean } colors Флаг для включения ANSI-эскейп-кодов для окраски вывода. По умолчанию false (без окраски).

Выводит значение значения. Пытается вывести значение наилучшим образом с учетом различных типов.

.isProxyEnabled()

Вспомогательная функция для проверки, включена ли функция защиты прокси Chai. Если прокси не поддерживаются или отключены в конфигурации Chai пользователя, то возвращает false. В противном случае возвращает true.

.objDisplay(object)

  • @param { Mixed } javascript объект для проверки

Определяет, соответствует ли объект или массив критериям для проверки в строке сообщений об ошибках или должен быть усечен.

.overwriteChainableMethod(ctx, name, method, chainingBehavior)

  • @param { Object } ctx объект, метод/свойство которого нужно перезаписать
  • @param { String } name имя метода/свойства для перезаписи
  • @param { Function } method функция, которая возвращает функцию, используемую для имени
  • @param { Function } chainingBehavior функция, которая возвращает функцию, используемую для свойства

Перезаписывает уже существующий цепной метод и предоставляет доступ к предыдущей функции или свойству. Должен возвращать функции, используемые для имени.

utils.overwriteChainableMethod(chai.Assertion.prototype, 'lengthOf',
  function (_super) {
  }
, function (_super) {
  }
);

Также может быть вызван напрямую из chai.Assertion.

chai.Assertion.overwriteChainableMethod('foo', fn, fn);

Затем может быть использован как любое другое утверждение.

expect(myFoo).to.have.lengthOf(3);
expect(myFoo).to.have.lengthOf.above(3);

.overwriteMethod(ctx, name, fn)

  • @param { Object } ctx объект, метод которого нужно перезаписать
  • @param { String } name имя метода для перезаписи
  • @param { Function } method функция, которая возвращает функцию, используемую для имени

Перезаписывает уже существующий метод и предоставляет доступ к предыдущей функции. Должна возвращать функцию, используемую для имени.

utils.overwriteMethod(chai.Assertion.prototype, 'equal', function (_super) {
  return function (str) {
    var obj = utils.flag(this, 'object');
    if (obj instanceof Foo) {
      new chai.Assertion(obj.value).to.equal(str);
    } else {
      _super.apply(this, arguments);
    }
  }
});

Также может быть вызван напрямую из chai.Assertion.

chai.Assertion.overwriteMethod('foo', fn);

Затем может быть использован как любое другое утверждение.

expect(myFoo).to.equal('bar');

.overwriteProperty(ctx, name, fn)

  • @param { Object } ctx объект, свойство которого нужно перезаписать
  • @param { String } name имя свойства для перезаписи
  • @param { Function } getter функция, которая возвращает функцию-геттер для использования с именем

Перезаписывает уже существующий геттер свойства и предоставляет доступ к предыдущему значению. Должна возвращать функцию для использования в качестве геттера.

utils.overwriteProperty(chai.Assertion.prototype, 'ok', function (_super) {
  return function () {
    var obj = utils.flag(this, 'object');
    if (obj instanceof Foo) {
      new chai.Assertion(obj.name).to.equal('bar');
    } else {
      _super.call(this);
    }
  }
});

Также может быть вызван напрямую из chai.Assertion.

chai.Assertion.overwriteProperty('foo', fn);

Затем может быть использован как любое другое утверждение.

expect(myFoo).to.be.ok;

.proxify(object)

  • @param { Object } obj
  • @param { String } nonChainableMethodName

Возвращает прокси заданного объекта, который генерирует ошибку при чтении несуществующего свойства. По умолчанию предполагается, что причиной является неправильно написанное свойство, и поэтому делается попытка предложить разумное предложение из списка существующих свойств. Однако, если предоставлено nonChainableMethodName, то причиной является неудача в вызове нецепного метода перед чтением несуществующего свойства.

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

.test(object, expression)

  • @param { Object } object (созданное утверждение)
  • @param { Arguments } chai.Assertion.prototype.assert аргументы

Тестирует объект на соответствие выражению.

.transferFlags(assertion, object, includeAll = true)

  • @param { Assertion } assertion утверждение, у которого нужно скопировать флаги
  • @param { Object } object объект, в который нужно скопировать флаги; обычно новое утверждение
  • @param { Boolean } includeAll

Копирует все флаги из assertion в object . Если includeAll установлено в значение false, то базовые флаги утверждения Chai (а именно object, ssfi, lockSsfi, и message) не будут скопированы.

var newAssertion = new Assertion();
utils.transferFlags(assertion, newAssertion);

var anotherAssertion = new Assertion(myObj);
utils.transferFlags(assertion, anotherAssertion, false);

.compatibleInstance(thrown, errorLike)

  • @param { Error } thrown ошибка
  • @param { Error | ErrorConstructor } errorLike объект для сравнения

Проверяет, совместимы ли два экземпляра (строго равны). Возвращает false, если errorLike не является экземпляром Error, потому что экземпляры совместимы только если оба являются экземплярами ошибок.

.compatibleConstructor(thrown, errorLike)

  • @param { Error } thrown ошибка
  • @param { Error | ErrorConstructor } errorLike объект для сравнения

Проверяет, совместимы ли два конструктора. Эта функция может принимать как конструктор ошибки, так и экземпляр ошибки в качестве аргумента errorLike. Конструкторы совместимы, если они одинаковы или если один является экземпляром другого.

.compatibleMessage(thrown, errMatcher)

  • @param { Error } thrown ошибка
  • @param { String | RegExp } errMatcher для поиска в сообщении

Проверяет, совместимо ли сообщение об ошибке с соответствием (строка или регулярное выражение). Если сообщение содержит строку или проходит проверку регулярного выражения, оно считается совместимым.

END_OF_DOCUMENT_MARKER

.getFunctionName(constructorFn)

  • @param { Function } constructorFn

Возвращает имя функции. Также включает функцию полифила, если constructorFn.name не определена.

.getConstructorName(errorLike)

  • @param { Error | ErrorConstructor } errorLike

Получает имя конструктора для экземпляра Error или самого конструктора.

.getMessage(errorLike)

  • @param { Error | String } errorLike

Получает сообщение об ошибке из объекта ошибки. Если err является строкой, возвращает её. Если у ошибки нет сообщения, возвращает пустую строку.

.getFuncName(constructorFn)

  • @param { Function } funct

Возвращает имя функции. Если передан не экземпляр функции, возвращает null. Также включает функцию полифила, если aFunc.name не определена.

.hasProperty(object, name)

  • @param { Object } object
  • @param { String | Symbol } name

Позволяет проверить, имеет ли объект собственное или унаследованное свойство с заданным именем.

В основном делает то же, что и оператор in, но корректно работает с значениями null/undefined и другими примитивами.

var obj = {
    arr: ['a', 'b', 'c']
  , str: 'Hello'
}

Результаты будут следующими.

hasProperty(obj, 'str');  // true
hasProperty(obj, 'constructor');  // true
hasProperty(obj, 'bar');  // false

hasProperty(obj.str, 'length'); // true
hasProperty(obj.str, 1);  // true
hasProperty(obj.str, 5);  // false

hasProperty(obj.arr, 'length');  // true
hasProperty(obj.arr, 2);  // true
hasProperty(obj.arr, 3);  // false

.getPathInfo(object, path)

  • @param { Object } object
  • @param { String } path

Позволяет получить информацию о свойстве в объекте по строковому пути.

Информация о пути состоит из объекта со следующими свойствами:

  • parent - Родительский объект свойства, на которое ссылается path
  • name - Имя конечного свойства, число, если это индексатор массива
  • value - Значение свойства, если оно существует, иначе undefined
  • exists - Существует ли свойство или нет

.getPathValue(object, path)

  • @param { Object } object
  • @param { String } path

Позволяет получить значения в объекте по строковому пути.

var obj = {
    prop1: {
        arr: ['a', 'b', 'c']
      , str: 'Hello'
    }
  , prop2: {
        arr: [ { nested: 'Universe' } ]
      , str: 'Hello again!'
    }
}

Результаты будут следующими.

getPathValue(obj, 'prop1.str'); // Hello
getPathValue(obj, 'prop1.att[2]'); // b
getPathValue(obj, 'prop2.arr[0].nested'); // Universe

© 2017 Chai.js Assertion Library
Licensed under the MIT License.
https://www.chaijs.com/api/plugins/

Spec-Zone.ru

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