我正在使用chai.js断言库来查找由半技术专业人员创建的清单中可能存在的错误。换句话说,正在编写配置,但人为错误可能。
目前,这样一个失败的断言:
var expect = require('chai').expect;
expect('String', 'Should be a Number').to.be.a('number');
导致抛出错误并显示完整堆栈。我可以通过指示不抛出错误来减少膨胀,同时向控制台输出更小的,更多的上下文消息吗?
就堆栈跟踪而言,我试过这个,没有任何成功:
chai.config.includeStack = false;
免责声明:这是我第一次尝试使用chai.js库。
答案 0 :(得分:1)
expect
在失败时抛出错误,因此您可以将每个调用包装在try / catch中,然后只使用您想要的部分:
var expect = require("chai").expect;
function friendlyAssert (test) {
try { test() }
catch (e) { console.log(e.message); }
}
// logs a message
friendlyAssert(function () {
expect("string", "Should be a number").to.be.a("number");
});
// completes silently
friendlyAssert(function () {
expect(8, "Should be a number").to.be.a("number");
})
// output:
// Should be a number: expected 'string' to be a number
答案 1 :(得分:0)
我不确定你是否想要采用这种方法,但你可以创建一个Chai插件,用一个捕获错误的实现覆盖a/an
,只显示它们而不是抛出异常。
例如:
var chai = require('chai');
var expect = chai.expect;
chai.use(function(_chai, utils) {
function newImpl(_super) {
return function () {
var r = _super.apply(this, arguments);
return function() {
try {
return r.apply(this, arguments);
} catch(e) {
console.log(e.message);
}
};
}
};
[ 'a', 'an' ].forEach((prop) => {
_chai.Assertion.overwriteProperty(prop, newImpl);
});
});
expect('String', 'Should be a Number').to.be.a('string');
您需要覆盖在测试中使用的所有方法和属性(上面的代码只处理a/an
,它们都是属性和方法,所以显示的实现非常具体()
更多信息here。