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
实现,这里不再赘述。
欢迎捉虫。