Node.js使用assert模块进行不中断的单元测试

Node.js自带的assert模块在测试时会抛出AssertionError中断测试,那么有的时候需要继续测试就很麻烦。
比如数据清洗,想要一次找出所有的数据就比较头疼。
一般来讲可以使用包装的方式实现不中断的单元测试:

const { strictEqual, AssertionError } = require("assert");

function _strictEqual(...rest) { //进行包装
    try {
        strictEqual(...rest);
    } catch (err) {
        if(err instanceof AssertionError) {
            console.error(err.message); //不中断
        } else {
            throw err;
        }
    }
}

还可以像这样:

const assert = require("assert");

for(let key in assert) {
    //判断:是function、定义在assert上、不是首字母大写的Class。由于Symbol对象不是enumerable,因此不用考虑。
    if(typeof assert[key] === "function" && assert.hasOwnProperty(key) && key[0].toLowerCase() === key[0]) {
        let f = assert[key];
        assert[key] = function (...rest) { //进行包装
            try {
                f(...rest);
            } catch (err) {
                if(err instanceof assert.AssertionError) {
                    console.error(err.message); //不中断
                } else {
                    throw err;
                }
            }
        };
    }
}

//测试
assert.strictEqual("1", 2, "× test failed"); //输出 × test failed

理论上讲,不魔改assert的方法的话可以另外的使用Promise.all实现,这里不再赘述。
欢迎捉虫。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容