AssertionStabilityLevel:3-锁定断言模块提供了一组简单的断言来测试不变量。该模块最初由Node.js内部使用,但也可以通过require('assert')在应用程序中使用。但是请注意,断言模块不是测试框架,也不是通用断言库。断言模块的API被锁定。意味着以后该模块应用和暴露的方法将不再修改和添加。assert(value[,message])v0.5.9添加了assert.ok()的别名。constassert=require('assert');assert(true);//OKassert(1);//OKassert(false);//抛出"AssertionError:false==true"assert(0);//throws"AssertionError:0==true"assert(false,'it\'sfalse');//throws"AssertionError:it'sfalse"assert.deepEqual(actual,expected[,message])v0.1.21版本新增,用于测试actual和expected的深度是否相等。原始数据类型的值将使用相等运算符(==)进行比较。此方法仅适用于可枚举并返回自身的属性。deepEqual()不能用于测试对象原型、附加符号或不可枚举的属性。这可能会导致一些意想不到的结果。例如,下面的示例不会抛出AssertionError,因为Error对象的属性不可枚举。//警告:这不会抛出断言错误!assert.deepEqual(Error('a'),Error('b'));"deep"equal的意思是:传递一个对象的子对象的可枚举并返回它自己属性也进行比较:constassert=require('assert');constobj1={a:{b:1}};constobj2={a:{b:2}};constobj3={a:{b:1}};constobj4=Object.create(obj1);assert.deepEqual(obj1,obj1);//OK,一个对象必须等于它自己assert.deepEqual(obj1,obj2);//AssertionError:{a:{b:1}}deepEqual{a:{b:2}}//b的值不同assert.deepEqual(obj1,obj3);//OK,两个对象相等assert.deepEqual(obj1,obj4);//AssertionError:{a:{b:1}}deepEqual{}//对象原型不能用于比较。如果传入的两个参数不相等,会抛出一个AssertionError,它有自己的messageAttribute,可以通过消息传递参数来设置。如果message参数未定义,它将被分配一个默认的错误消息。assert.deepStrictEqual(actual,expected[,message])v1.2.0和assert.deepEqual()之间只有两个区别。首先,使用强相等运算符(===)比较原始数据类型的值。其次,对象之间的比较要求它们的原型(prototype)也一致。如果传入的两个参数不相等,就会抛出AssertionError,它会有一个message属性,可以通过message参数来设置。如果message参数未定义,它将被分配一个默认的错误消息。assert.doesNotThrow(block,error)v0.1.21版本增加了block方法不会抛出错误的断言。关于throw(抛出)的更多细节,请参考assert.throw()。当调用assert.doesNotThrow()时,它会立即调用block方法。如果抛出错误并且错误类型与传递参数中的错误类型相同,则此方法将抛出AssertionError。如果错误类型不一致,或者参数error未定义,则将错误返回给调用者。比如下面的例子,会因为错误类型不一致而抛出TypeError。assert.doesNotThrow(()=>{thrownewTypeError('Wrongvalue');},SyntaxError);但在下面的示例中,将抛出一个AssertionError并显示消息“Gotunwantedexception(TypeError)..”。assert.doesNotThrow(()=>{thrownewTypeError('Wrongvalue');},TypeError);当抛出AssertionError时,如果传递的参数中定义了message参数,则会附加到message后面的AssertionError。assert.doesNotThrow(()=>{thrownewTypeError('Wrongvalue');},TypeError,'Whoops');//抛出:AssertionError:Gotunwantedexception(TypeError).Whoopsassert.equal(actual,expected[,message])v0.1.21版本增加了等价运算符(==)来比较实际和预期之间的浅层相等。constassert=require('assert');assert.equal(1,1);//好的,1==1assert.equal(1,'1');//好的,1=='1'assert.equal(1,2);//AssertionError:1==2assert.equal({a:{b:1}},{a:{b:1}});//AssertionError:{a:{b:1}}=={a:{b:1}}如果传入的两个参数不相等,会抛出AssertionError,它会有一个message属性,可以由消息参数设置。如果message参数未定义,它将被分配一个默认的错误消息。assert.fail(actual,expected,message,operator)v0.1.21版本添加以抛出AssertionError。如果消息是比较结果为false,则错误消息输出actual和expected的值,由传递的运算符分隔;如果结果为真,则错误消息输出传递的消息。constassert=require('assert');assert.fail(1,2,undefined,'>');//AssertionError:1>2assert.fail(1,2,'whoops','>');//AssertionError:whoopsassert.ifError(value)v0.1.97版本添加如果值为真则输出值。适用于测试回调方法中的错误参数。constassert=require('assert');assert.ifError(0);//OKassert.ifError(1);//抛出1assert.ifError('error');//抛出'error'assert.ifError(newError());//ThrowsErrorassert.notDeepEqual(actual,expected[,message])v0.1.21版本增加了深度差的测试,与assert.deepEqual()相反。constassert=require('断言');constobj1={a:{b:1}};constobj2={a:{b:2}};constobj3={a:{b:1}};constobj4=Object.create(obj1);assert.notDeepEqual(obj1,obj1);//AssertionError:{a:{b:1}}notDeepEqual{a:{b:1}}assert.notDeepEqual(obj1,obj2);//好的,obj1和obj2不是深度相等assert.notDeepEqual(obj1,obj3);//AssertionError:{a:{b:1}}notDeepEqual{a:{b:1}}assert.notDeepEqual(obj1,obj4);//好的,obj1和obj2并不完全相等。如果传入的两个参数不深度相等,则会抛出AssertionError,它会有一个message属性,可以通过message参数设置。如果message参数未定义,它将被分配一个默认的错误消息。assert.notDeepStrictEqual(actual,expected[,message])v1.2.0版本增加了测试深度和强度,与assert.deepStrictEqual()相反。constassert=require('assert');assert.notDeepEqual({a:1},{a:'1'});//AssertionError:{a:1}notDeepEqual{a:'1'}assert.notDeepStrictEqual({a:1},{a:'1'});//OK如果传入的两个参数是deep且stronglyequal,就会抛出AssertionError,它会有一个message属性,可以通过message中传参来设置。如果message参数未定义,它将被分配一个默认的错误消息。assert.notEqual(actual,expected[,message])v0.1.21版本添加了不等式运算符(!=)来测试浅层不等式。constassert=require('assert');assert.notEqual(1,2);//OKassert.notEqual(1,1);//断言错误:1!=1assert.notEqual(1,'1');//AssertionError:1!='1'如果传入的两个参数浅相等,则会抛出AssertionError,其中会有一个message属性,可以通过message参数设置。如果message参数未定义,它将被分配一个默认的错误消息。assert.notStrictEqual(actual,expected[,message])v0.1.21版本增加了强不等式运算符(!==)来测试强不等式。constassert=require('assert');assert.notStrictEqual(1,2);//OKassert.notStrictEqual(1,1);//断言错误:1!=1assert.notStrictEqual(1,'1');//OK如果传入的两个参数相等,就会抛出AssertionError,它会有一个message属性,可以通过message参数来设置。如果message参数未定义,它将被分配一个默认的错误消息。assert.ok(value[,message])v0.1.21版本添加,用于测试value是否为真。其实相当于assert.equal(!!value,true,message)。如果该值不为真,则抛出AssertionError,并且附带的消息信息与传入消息一致。如果message参数未定义,它将被分配一个默认的错误消息。constassert=require('assert');assert.ok(true);//OKassert.ok(1);//OKassert.ok(false);//抛出“AssertionError:false==true”assert.ok(0);//throws"AssertionError:0==true"assert.ok(false,'it\'sfalse');//throws"AssertionError:it'sfalse"assert.strictEqual(actual,expected[,message])v0.1.21版本增加了强相等运算符(===)来测试传递的参数是否强相等。constassert=require('断言');断言。严格相等(1、2);//断言错误:1===2assert。严格相等(1,1);//确定断言。strictEqual(1,'1');//AssertionError:1==='1'如果传入的两个参数不相等,就会抛出AssertionError,它会有一个message属性,可以通过message参数来设置。如果message参数未定义,它将被分配一个默认的错误消息。assert.throws(block,error)v0.1.21版本增加了预期的block方法抛出错误。如果传入自定义错误,它可以是构造函数、正则表达式或验证函数。如果传递了一条消息但没有抛出错误,则该消息将附加一个AssertionError。使用构造函数验证实例:assert.throws(()=>{thrownewError('Wrongvalue');},Error);使用正则表达式验证错误:assert.throws(()=>{thrownewError('Wrongvalue');},/value/);自定义错误验证:assert.throws(()=>{thrownewError('Wrongvalue');},function(err){if((errinstanceofError)&&/value/.test(err)){returntrue;}},'意外的错误');请注意,错误参数可以是一个字符串。如果第二个参数是字符串,则忽略错误参数,直接使用字符串作为输出信息。但这会导致容易被忽视的问题://这是一个错误!不要这样做!assert.throws(myFunction,'missingfoo','didnotthrowwithexpectedmessage');//Dothisinstead.assert.throws(myFunction,/missingfoo/,'didnotthrowwithexpectedmessage');全文目录请参考:全文目录
