power-assert什么是power-assert用官方的话来说,答案就是“PowerAssert”概念在JavaScript中的实现。通过标准断言接口提供描述性断言消息。没有API就是最好的API。使用power-assert,你不需要学习很多断言库API(在大多数情况下,你只需要记住一个assert(any_expression)函数)就不要再去记忆一大堆断言API了。只需创建返回真值或不返回真值的表达式,power-assert就会将其作为失败消息的一部分显示在屏幕上,而您根本无需键入消息。power-assert的核心价值是绝对的简单和稳定。特别是power-assert坚持最简单的测试形式github地址:power-assertPreface这个库在github上最后一次更新是6个月前,npm上最后一次更新是3年前,所以不是很推荐对于企业,建议仅在个人或小型项目中使用。如果你需要一个足够稳定的测试库用于生产,你不妨看看Jestpower-assert。与很多常见的断言库相比,最大的特点就是简单。功能强大,不提供很多API,上手非常简单,容易迁移本文将涉及power-assert基本的浏览器和nodejs的例子,不是复杂的例子基本的例子调用assert()传入一个表达式和一个错误信息(可选),如果表达式的值为真,则不执行任何操作,如果值为假,则显示第二个参数传递的错误信息和一些有用的表达式信息让我们写一个失败的测试constassert=require(“断言”);constobj={a:{c:4}};constarr=[1,2,34,6,7,{a:[5,7]}]assert(obj.a.c===arr[5].a[1],"断言错误");power-assert只需要直接导入assert模块,运行前需要做一些处理(会自动转成power-assert),下面会详细说明,这里先看输出/root/RemoteWorking/powerAssert_/node_modules/empower/index.js:80throwe;^AssertionError[ERR_ASSERTION]:断言错误#./test/index.js:7assert(obj.a.c===arr[5].a[1],"断言错误")|||||||||||||||7||||||[5,7]|||||对象{a:#Array#}||||[1,2,34,6,7,#对象#]||4假|Object{c:4}Object{a:#Object#}[number]arr[5].a[1]=>7[number]obj.a.c=>4atDecorator._callFunc(/root/RemoteWorking/powerAssert_/node_modules/empower-core/lib/decorator.js:114:29)在Decorator.concreteAssert(/root/RemoteWorking/powerAssert_/node_modules/empower-core/lib/decorator.js:103:17)在decoratedAssert(/root/RemoteWorking/powerAssert_/node_modules/empower-core/lib/decorate.js:49:30)在powerAssert(/root/RemoteWorking/powerAssert_/node_modules/empower-core/index.js:63:32)在Object.(/root/RemoteWorking/powerAssert_/test/assert.js:41:1)在Module._compile(node:internal/modules/cjs/loader:1103:14)在Object.Module._extensions..js(node:internal/modules/cjs/loader:1155:10)在Module.load(node:internal/modules/cjs/loader:981:32)在Function.Module._load(node:internal/modules/cjs/loader:822:12)在Function.executeUserEntryPoint[asrunMain](node:internal/modules/run_main:77:12){generatedMessage:false,code:'ERR_ASSERTION',actual:false,expected:true,operator:'==',powerAssertContext:{来源:{content:'assert(obj.a.c===arr[5].a[1],"断言错误")',filepath:'./test/index.js',line:7},args:[{value:false,events:[{value:[Object],espath:'arguments/0/left/object/object'},{value:[Object],espath:'arguments/0/left/object'},{value:4,espath:'arguments/0/left'},{value:[Array],espath:'arguments/0/right/object/object/object'},{value:[Object],espath:'arguments/0/right/object/object'},{值:[数组],espath:'参数s/0/right/object'},{value:7,espath:'arguments/0/right'},{value:false,espath:'arguments/0'}]}]}}可以看出power-assert会输出表达式各部分的值,下面还会输出表达式更详细的上下文信息,提供了很有参考价值的信息。很多情况下,我们不再需要像其他测试库那样手动打印信息快速入门,快速体验可以使用官方示例快速体验power-assertnodejs示例:power-assert-node-seed浏览器示例:power-assert-karma-seed推荐使用nodejsnodejs如果要测试的文件不多,可以使用espower-cli直接转换代码,只需要先安装espower-cli然后:espower源文件>输出目标文件,运行转换后的文件代码如下npminstallespower-cliespower./test/some_test.js>./build/test/some_test.jsnode./build/test/some_test.js也可以配置一些工具,简单自动化。项目中使用,推荐使用babel-preset-power-assert转换代码后再运行测试。您可以使用特殊的测试工具。比如官方例子中的mocha,你也可以自己配置测试浏览器使用。因为power-assert本身是一个nodejs模块,不支持浏览器,所以官方提供了espowerify支持在浏览器中使用power-assert。Assertionerrorsinbrowsers,errorsFeedback会打印在浏览器的console上,比nodejs更方便查看和调试推荐做法推荐做法在前期有点繁琐,但是适用于除此之外的很多情况官方的例子由于大多数情况下我们不会使用browserify,所以我们可以根据官方的例子,做一点处理,做一个浏览器通用的power-assert模块,这样就可以在任何地方导入使用,剩下的配置是babelbabel-preset-power-assert转换代码使用下面是详细的浏览器power-assert模块制作步骤(不想自己制作的可以移到文末下载完成的模块)power-assert官方文档中提到那我们就可以通过espowerify来支持浏览器,把它打包成一个模块,可以直接被浏览器导入,供我们在不同的项目中使用。对于assert方法,我们可以直接导入自己封装的支持浏览器的power-assert模块,只需要转换对应的测试即可。代码可以用power-assert打包Step1.通过browserify+espowerify将power-assert打包为浏览器可用的模块(需要安装browserify、espowerify、power-assert)1.模块直接写//power-assert.jsconstassert=require("assert");module.exports=断言;2.用browserify打包模块,即打包包含power-assert的模块,browserify会将一些node内置模块转换为,在浏览器中使用polyfill(power-assert使用util、buffer、assert三个node内置modules)运行命令转换:browserify-tespowerifyabovefileaddress>exportaddress这一步后得到打包文件,但是brwoserify并没有导出模块,所以下面需要手动导出2.手动添加模块导出esm格式(修改上一步打包的文件)1.在最上面添加:letassert;在底部找到require('power-assert'),这里的require不是node函数的原生函数,而是一个自定义函数,你可以得到可用的power-assert模块2.Will:constassert=require("assert");module.exports=assert;将这两行替换为:assert=require("assert");以便将模块赋值给上面定义的assert变量3.在最下面添加:exportdefaultassert;这样exportingwhatweneed至此,打包完成,模块在浏览器中可用(可以自由导入导出)3.压缩处理【推荐】(可选),使用自己喜欢的工具压缩代码,因为文件后面会经常用到,所以使用rollup+terser压缩代码,使文件更小参考rollup配置://Compresscodeimport{terser}from'rollup-plugin-terser';//rollup.config.jsexportdefault{input:'fileaddress',output:{file:'exportaddress',format:'esm'},plugins:[terser(),]};也可以使用其他工具,这里推荐使用esbuild快速压缩执行:esbuild文件路径--minify--outfile=导出生成文件的路径亲测rollup压缩文件273KB、但esbuild已压缩输出为280KB。如果要经常使用,建议rollup+terser压缩代码。经过以上步骤,我们就创建了一个浏览器通用的power-assert模块。之后我们就可以在自己的项目中导入使用了,如下importassertfrom"moduleaddress";assert("expression");和上面的代码不同的只是topimport,对于代码转换的部分,我们配置babel来完成这个,不管是在webpack,rollup,parcel还是其他工具中,我们也可以使用power-assert。最后,上面的例子在浏览器中使用起来比较麻烦。您可以直接下载完成的模块并在浏览器中使用它。由于与power-assert相关的工具很少,使用起来可能有点困难。麻烦,做好前处理,以后就可以愉快的使用了