之前看过狼叔的How-to-learn-node-correctly文章,受益匪浅。其中,狼叔的《每天阅读10个npm模块》这几个字让我很震惊,当时我觉得不可能,但是看完之后我才意识到,如果我们先从一些小包入手,也许我们可以做到有一段时间了,受狼叔的影响,决定开这个专栏【今晚有大包子】,不定期更新我对npm模块源码的分享,由于本人技术水平有限,如果有有错误请指出,谢谢简介最近会先刷新小库合集中的包,不过今天主要吃的是is-sorted包,一个检查Array是否排序的小模块,在看介绍一下,我们知道这是一个判断Array是否排序的模块,下面是一个官方的例子:varsorted=require('is-sorted')console.log(sorted([1,2,3]))//=>trueconsole.log(sorted([3,1,2]))//=>false//支持自定义比较器console.log(sorted([3,2,1],function(a,b){returnb-a})//=>true目录结构目录结构很简单,index.js作为入口文件,测试脚本存放在test文件夹下。maincode/***@param{Array}array待检查数组*@param{Function}comparatorcomparator*/module.exports=functionchecksort(array,comparator){comparator=comparator||defaultComparatorfor(vari=1,length=array.length;i0)returnfalse}returntrue}以上代码简单明白,我也加了一个文档注释,无非就是传入一个数组和一个比较器,如果没有传入比较器,就会使用默认的升序比较器。//默认升序比较函数defaultComparator(a,b){returna-b}unittestvarsorted=require('../')varfixtures=require('./fixtures')vartape=require('tape')varcomparators={descending:function(a,b){returnb-a}}fixtures.forEach(function(f){tape('returns'+f.expected+'for'+f.array,function(t){t.plan(1)varactual=sorted(f.array,comparators[f.comparator])t.equal(actual,f.expected)})})单元测试脚本很简单,tapastestFramework,and然后读取fixtures文件中的测试用例,然后一一断言。//fixtures.json[...{"array":[1,2,3,4,6],"expected":true},{"array":[5,4,3,1,1],"comparator":"descending","expected":true}...]综上所述,这个包只能处理number类型的数组,有很大的局限性,但是单元测试部分给了我很大的启发。如果要对一个功能进行多次测试,用类似json的方式配置测试用例,不仅可以提高工作效率,还可以减少单元测试的工作量,这也是吃了这个包的一个小收获。