首页 > 技术文章 > Nodejs v4.x.0API文档学习(2)Assert断言测试模块

fhen 2016-03-15 11:28 原文

文档参考地址:https://nodejs.org/dist/latest-v4.x/docs/api/

Assert(断言)

  assert模块提供了一组简单的断言测试方法,可以拥有测试不变量。该模块本意是用于node.js内部使用,但是现在可以通过require('assert')引入模块的方式在应用程序代码中使用。然而,断言并不是一个测试框架,也不是用来作为一个通用的断言库。

  assert模块的API是锁级别的。这意味着该模块实现的方法和暴露的任何方法将不可增加或更改。

assert(value[, message])#

有一个别名assert.ok() .

const assert = require('assert');

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

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

用于深层次的比较参数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参数没有定义,那么将指定一个默认的错误信息。

推荐阅读