Spec-Zone.ru › Node.js 6 LTS

Assert

Устойчивость: 2 - Стабильно

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

assert(value[, message])

Добавлен в: v0.5.9
  • value <any>
  • message <any>

Псевдоним для assert.ok().

assert.deepEqual(actual, expected[, message])

Добавлен в: v0.1.21
  • actual <any>
  • expected <any>
  • message <any>

Проверяет глубокое равенство между параметрами actual и expected. Примитивные значения сравниваются с оператором равенства ( == ).

Рассматриваются только перечисляемые собственные свойства. Реализация deepEqual() не проверяет прототипы объектов, прикреплённые символы или неперечисляемые свойства. Это может привести к некоторым потенциально неожиданным результатам. Например, в следующем примере не возникает AssertionError , потому что свойства объекта Error неперечисляемые:

// WARNING: This does not throw an AssertionError!
assert.deepEqual(Error('a'), Error('b'));

«Глубокое» равенство означает, что также оцениваются перечисляемые собственные свойства дочерних объектов:

const assert = require('assert');

const obj1 = {
  a: {
    b: 1
  }
};
const obj2 = {
  a: {
    b: 2
  }
};
const obj3 = {
  a: {
    b: 1
  }
};
const obj4 = Object.create(obj1);

assert.deepEqual(obj1, obj1);
// OK, object is equal to itself

assert.deepEqual(obj1, obj2);
// AssertionError: { a: { b: 1 } } deepEqual { a: { b: 2 } }
// values of b are different

assert.deepEqual(obj1, obj3);
// OK, objects are equal

assert.deepEqual(obj1, obj4);
// AssertionError: { a: { b: 1 } } deepEqual {}
// Prototypes are ignored

Если значения не равны, выбрасывается AssertionError с свойством message , установленным равным значению параметра message. Если параметр message не определён, используется сообщение об ошибке по умолчанию.

assert.deepStrictEqual(actual, expected[, message])

Добавлен в: v1.2.0
  • actual <any>
  • expected <any>
  • message <any>

В целом идентично assert.deepEqual() с двумя исключениями. Во-первых, примитивные значения сравниваются с оператором строгого равенства ( === ). Во-вторых, сравнение объектов включает проверку строгого равенства их прототипов.

const assert = require('assert');

assert.deepEqual({ a: 1 }, { a: '1' });
// OK, because 1 == '1'

assert.deepStrictEqual({ a: 1 }, { a: '1' });
// AssertionError: { a: 1 } deepStrictEqual { a: '1' }
// because 1 !== '1' using strict equality

Если значения не равны, выбрасывается AssertionError с свойством message , установленным равным значению параметра message. Если параметр message не определён, используется сообщение об ошибке по умолчанию.

assert.doesNotThrow(block[, error][, message])

Добавлен в: v0.1.21
  • block <Функция>
  • error <RegExp> | <Функция>
  • message <any>

Утверждает, что функция block не вызывает ошибку. Подробнее см. assert.throws().

При вызове assert.doesNotThrow() он сразу же вызовет функцию block.

Если произошла ошибка и она имеет тот же тип, что и указанный в параметре error, выбрасывается AssertionError . Если ошибка имеет другой тип, или параметр error не определён, ошибка передаётся обратно вызывающей стороне.

Например, следующее вызовет TypeError, потому что в утверждении нет соответствующего типа ошибки:

assert.doesNotThrow(
  () => {
    throw new TypeError('Wrong value');
  },
  SyntaxError
);

Однако, следующее приведёт к AssertionError с сообщением «Получена нежелательная исключение (TypeError)..»:

assert.doesNotThrow(
  () => {
    throw new TypeError('Wrong value');
  },
  TypeError
);

Если выбрасывается AssertionError и для параметра message задано значение, значение message будет добавлено к сообщению AssertionError:

assert.doesNotThrow(
  () => {
    throw new TypeError('Wrong value');
  },
  TypeError,
  'Whoops'
);
// Throws: AssertionError: Got unwanted exception (TypeError). Whoops

assert.equal(actual, expected[, message])

Добавлен в: v0.1.21
  • actual <any>
  • expected <any>
  • message <any>

Проверяет поверхностное, принудительное равенство между параметрами actual и expected с использованием оператора равенства ( == ).

const assert = require('assert');

assert.equal(1, 1);
// OK, 1 == 1
assert.equal(1, '1');
// OK, 1 == '1'

assert.equal(1, 2);
// AssertionError: 1 == 2
assert.equal({a: {b: 1}}, {a: {b: 1}});
//AssertionError: { a: { b: 1 } } == { a: { b: 1 } }

Если значения не равны, выбрасывается AssertionError с свойством message , установленным равным значению параметра message. Если параметр message не определён, используется сообщение об ошибке по умолчанию.

assert.fail(message)

assert.fail(actual, expected[, message[, operator[, stackStartFunction]]])

Добавлен в: v0.1.21
  • actual <any>
  • expected <any>
  • message <any>
  • operator <строка> По умолчанию: '!='
  • stackStartFunction <функция> По умолчанию: assert.fail

Выбрасывает AssertionError. Если message ложно, сообщение об ошибке устанавливается как значения actual и expected , разделенные заданным operator. В противном случае, сообщение об ошибке — это значение message. Если stackStartFunction задано, все кадровые записи выше этой функции будут удалены из трассировки стека (см. Error.captureStackTrace).

const assert = require('assert');

assert.fail(1, 2, undefined, '>');
// AssertionError: 1 > 2

assert.fail(1, 2, 'fail');
// AssertionError: fail

assert.fail(1, 2, 'whoops', '>');
// AssertionError: whoops

assert.fail('boom');
// AssertionError: boom

assert.fail('a', 'b');
// AssertionError: 'a' != 'b'

Пример использования stackStartFunction для обрезки трассировки стека исключения:

function suppressFrame() {
  assert.fail('a', 'b', undefined, '!==', suppressFrame);
}
suppressFrame();
// AssertionError: 'a' !== 'b'
//     at repl:1:1
//     at ContextifyScript.Script.runInThisContext (vm.js:44:33)
//     ...

assert.ifError(value)

Добавлен в: v0.1.97
  • value <any>

Выбрасывает value , если value истинно. Это полезно при тестировании аргумента error в обратных вызовах.

const assert = require('assert');

assert.ifError(null);
// OK
assert.ifError(0);
// OK
assert.ifError(1);
// Throws 1
assert.ifError('error');
// Throws 'error'
assert.ifError(new Error());
// Throws Error

assert.notDeepEqual(actual, expected[, message])

Добавлен в: v0.1.21
  • actual <any>
  • expected <any>
  • message <any>

Проверяет любые глубокие неравенства. Противоположность assert.deepEqual().

const assert = require('assert');

const obj1 = {
  a: {
    b: 1
  }
};
const obj2 = {
  a: {
    b: 2
  }
};
const obj3 = {
  a: {
    b: 1
  }
};
const obj4 = Object.create(obj1);

assert.notDeepEqual(obj1, obj1);
// AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } }

assert.notDeepEqual(obj1, obj2);
// OK: obj1 and obj2 are not deeply equal

assert.notDeepEqual(obj1, obj3);
// AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } }

assert.notDeepEqual(obj1, obj4);
// OK: obj1 and obj4 are not deeply equal

Если значения глубоко равны, выбрасывается AssertionError с свойством message , установленным равным значению параметра message. Если параметр message не определён, используется сообщение об ошибке по умолчанию.

assert.notDeepStrictEqual(actual, expected[, message])

Добавлен в: v1.2.0
  • actual <any>
  • expected <any>
  • message <any>

Проверяет глубокое строгое неравенство. Противоположность assert.deepStrictEqual().

const assert = require('assert');

assert.notDeepEqual({a: 1}, {a: '1'});
// AssertionError: { a: 1 } notDeepEqual { a: '1' }

assert.notDeepStrictEqual({a: 1}, {a: '1'});
// OK

Если значения глубоко и строго равны, выбрасывается AssertionError с свойством message , установленным равным значению параметра message. Если параметр message не определён, используется сообщение об ошибке по умолчанию.

assert.notEqual(actual, expected[, message])

Добавлен в: v0.1.21
  • actual <any>
  • expected <any>
  • message <any>

Проверяет поверхностное, принудительное неравенство с использованием оператора неравенства ( != ).

const assert = require('assert');

assert.notEqual(1, 2);
// OK

assert.notEqual(1, 1);
// AssertionError: 1 != 1

assert.notEqual(1, '1');
// AssertionError: 1 != '1'

Если значения равны, выбрасывается AssertionError с свойством message , установленным равным значению параметра message. Если параметр message не определён, используется сообщение об ошибке по умолчанию.

assert.notStrictEqual(actual, expected[, message])

Добавлен в: v0.1.21
  • actual <any>
  • expected <any>
  • message <any>

Проверяет строгое неравенство, определяемое оператором строгого неравенства ( !== ).

const assert = require('assert');

assert.notStrictEqual(1, 2);
// OK

assert.notStrictEqual(1, 1);
// AssertionError: 1 !== 1

assert.notStrictEqual(1, '1');
// OK

Если значения строго равны, выбрасывается AssertionError с свойством message , установленным равным значению параметра message. Если параметр message не определён, используется сообщение об ошибке по умолчанию.

assert.ok(value[, message])

Добавлен в: v0.1.21
  • value <any>
  • message <any>

Проверяет, является ли value истинным. Эквивалентно assert.equal(!!value, true, message).

Если value не имеет истинного значения, выбрасывается AssertionError с свойством message , установленным равным значению параметра message. Если параметр message имеет значение undefined, используется сообщение об ошибке по умолчанию.

const assert = require('assert');

assert.ok(true);
// OK
assert.ok(1);
// OK
assert.ok(false);
// throws "AssertionError: false == true"
assert.ok(0);
// throws "AssertionError: 0 == true"
assert.ok(false, 'it\'s false');
// throws "AssertionError: it's false"

assert.strictEqual(actual, expected[, message])

Добавлен в: v0.1.21
  • actual <any>
  • expected <any>
  • message <any>

Проверяет строгое равенство, как определено оператором строгого равенства ( === ).

const assert = require('assert');

assert.strictEqual(1, 2);
// AssertionError: 1 === 2

assert.strictEqual(1, 1);
// OK

assert.strictEqual(1, '1');
// AssertionError: 1 === '1'

Если значения не строго равны, выбрасывается AssertionError с свойством message , установленным равным значению параметра message. Если параметр message не определен, используется сообщение об ошибке по умолчанию.

assert.throws(block[, error][, message])

Добавлен в: v0.1.21
  • block <Функция>
  • error <Выражение регулярного соответствия> | <Функция>
  • message <any>

Ожидается, что функция block выбросит ошибку.

Если указано, error может быть конструктором, RegExp или функцией валидации.

Если указано, message будет содержать сообщение, предоставленное AssertionError в случае, если блок не выбросит ошибку.

Проверка instanceof с использованием конструктора:

assert.throws(
  () => {
    throw new Error('Wrong value');
  },
  Error
);

Проверка сообщения об ошибке с использованием RegExp:

assert.throws(
  () => {
    throw new Error('Wrong value');
  },
  /value/
);

Пользовательская валидация ошибок:

assert.throws(
  () => {
    throw new Error('Wrong value');
  },
  function(err) {
    if ((err instanceof Error) && /value/.test(err)) {
      return true;
    }
  },
  'unexpected error'
);

Обратите внимание, что error не может быть строкой. Если в качестве второго аргумента задана строка, предполагается, что error опущена, а строка будет использоваться для message вместо. Это может привести к ошибкам, которые трудно заметить:

// THIS IS A MISTAKE! DO NOT DO THIS!
assert.throws(myFunction, 'missing foo', 'did not throw with expected message');

// Do this instead.
assert.throws(myFunction, /missing foo/, 'did not throw with expected message');

© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/dist/latest-v6.x/docs/api/assert.html

Spec-Zone.ru

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