node.jsassert学习梳理本文只是对assert断言学习的个人梳理,也希望能为刚开始学习assert的同学提供一个基础框架。1.assert概念assert模块提供了一组简单的断言测试,可用于测试不变量。存在严格模式和遗留模式,但只推荐使用严格模式。2、Assert.AssertionError是Error的子类,表示断言失败。assert模块抛出的所有错误都是AssertionError类的实例3.assert方法的一些规则equal,notEqual,deepEqual,notDeepEqual:使用'=='比较器进行比较。即:没有严格使用'=='比较器的方法。strictEqual,notStrictEqual,strictDeepEqual,notStrictDeepEqual:使用'==='比较器进行比较。即:包含strict的方法使用'==='比较器。notEqual、notDeepEqual、notStrictDeepEqual与没有Not的方法正好相反,但它们的用法完全一样。注意:在最新的node版本中,不带strict的方法已经被废弃了4.assert方法详解assert(value[,message])相当于assert.ok(),用于判断一个值是否为真。如果为真,则线路测试通过;如果为假,将报告错误。如果没有第二个参数,默认会报错“AssertionError:value==true”。如果第二个参数存在,则抛出消息内容])严格相等,与全等符号(===)的判断结果相同。assert.strictEqual(1,1,'消息');//输出未定义的assert.strictEqual(1,'1','message');//输出AssertionError:messageassert.strictEqual(1,'1','message');//OutputAssertionError:messageassert.deepStrictEqual(actual,expected,[message])测试实际参数和预期参数之间的深度相等。1.当比较的两边都是基本类型时,等价于euqal()。2.当比较的两边都是引用类型时,引用类型中的每个属性都与equal()进行比较。比较规则使用SameValue比较(使用Object.is())来比较原始值。对象的类型标签应该相同。使用严格的相等比较来比较对象的原型。仅考虑可枚举的自身属性。始终比较Error的名称和消息,即使这些不是可枚举的属性。可枚举自身的Symbol属性也会进行比较。对象包装器作为对象和未包装的值进行比较。对象属性的比较是无序的。Map键与Set子项的比较是无序的。当两边的值不一样或者遇到循环引用时递归停止。constassert=require('assert').strict;//失败,因为1!=='1'。assert.deepStrictEqual({a:1},{a:'1'});//以下对象没有自己的属性。constdate=newDate();常量对象={};constfakeDate={};Object.setPrototypeOf(fakeDate,Date.prototype);//不同的原型:assert.deepStrictEqual(object,fakeDate);//-{}//+Date{}//类型标签不同:assert.deepStrictEqual(date,fakeDate);//-2018-04-26T00:49:08.604Z//+日期{}assert.deepStrictEqual(NaN,NaN);//通过是因为使用了SameValue比较。//解压后的数字不同:assert.deepStrictEqual(newNumber(1),newNumber(2));//-[Number:1]//+[Number:2]assert.deepStrictEqual(newString('foo'),Object('foo'));//通过,因为对象与展开的字符串相同。assert.deepStrictEqual(-0,-0);//经过。//使用SameValue比较零不同:assert.deepStrictEqual(0,-0);//-0//+-0constsymbol1=Symbol();constsymbol2=符号();assert.deepStrictEqual({[symbol1]:1},{[symbol1]:1});//通过,因为两个对象上的符号相同。assert.deepStrictEqual({[symbol1]:1},{[symbol2]:1});//{//[Symbol()]:1//}constweakMap1=newWeakMap();constweakMap2=newWeakMap([[{},{}]]);constweakMap3=newWeakMap();weakMap3.unequal=true;assert.deepStrictEqual(weakMap1,weakMap2);//通过,因为无法比较条目。//失败,因为weakMap3有一个weakMap1没有的属性:assert.deepStrictEqual(weakMap1,weakMap3);//WeakMap{//-[itemsunknown]//+[itemsunknown],//+unequal:true//}assert.fail([message])使用提供的错误消息或默认错误消息抛出AssertionError。如果消息参数是Error的一个实例,它将被抛出而不是AssertionError。constassert=require('assert').strict;assert.fail();//AssertionError[ERR_ASSERTION]:Failedassert.fail('failed');//AssertionError[ERR_ASSERTION]:失败assert.fail(newTypeError('Arrayisrequired'));//TypeError:Arrayisrequiredassert.ifError(value)如果value不是undefined或null,则抛出value。assert.throws(fn,error)期望fn函数抛出错误(这个方法还不是很清楚)
