Assert
Модуль assert предоставляет набор простых проверок утверждений, которые можно использовать для проверки инвариантов.
assert(value[, message])
-
value<any> -
message<any>
Псевдоним для assert.ok().
assert.deepEqual(actual, expected[, message])
-
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])
-
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])
Утверждает, что функция 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])
-
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]]])
-
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)
-
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])
-
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])
-
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])
-
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])
-
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])
-
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])
-
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])
-
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